之前写程序时,最喜欢把类的头文件全部放到stdafx.h (解决的方法,只是把第三方的头文件放到一个公共的地方,别把自己写的头文件也放进去,不然就会出现这种情况)或类似自定义的某个头文件中(如include_files.h),然后在不同的文件中需要调用别的文件中的类或变量或函数什么的,只要直接#include "include_files.h"就行了,今天终于遇到了error C2504错误。具体说明如下:
有以下几个文件:include_files.h AA.h AA.cpp BB.h BB.cpp
-
- #pragma once
- ...
- #include "AA.h"
- #include "BB.h"
- ...
-
-
- #include "include_files.h"
- class AA
- {
- public: ...
- };
-
-
- #include "include_files.h"
- class BB : public AA
- {
- public: ...
- }
编译后就会报错C2504,未定义基类AA,msdn上的解释是这样的:
- Missing include file. 未包含头文件
- External base class not declared with extern. 外部类没有用ertern定义。
而这个错误就是因为头文件包含得不明确。
编译时,首先编译了AA.h,
因为AA.h中包含了include_files.h,所以又去编译了include_files.h
include_files.h里即包含AA.h又包含BB.h,所以继续编译
AA.h正在编译中,于是再去编译BB.h,而BB.h未编译,但它里面却用到了类AA,然而此时我们仍在编译AA.h的嵌套中,即AA.h未编译完,显然类AA还没有明确定义,所以才报了错。即如下一个过程。
- 编译AA.h...
- 编译include_files.h
- 编译AA.h, 根据#pragam once跳过
- 编译BB.h
- 编译include_files.h,根据#pragam once跳过
- 编译class BB : public AA
- 报错:error C2504:未定义基类AA...
所以以后不能把类定义的头文件随便扔在一块了,还是勤快些,在用到时才#include吧。。。
分享到:
相关推荐
解释:在C语言中,for循环可以被用来解决循环次数已知的问题。 16. 在下面循环w语句中内层循环体S语句执行次数为n(n+1)/2。 解释:在C语言中,循环体的执行次数可以通过数学公式来计算。 17. 在下面do循环语句中,...
1. **循环语句**:C语言中的循环语句包括`while`、`do-while`和`for`。`while`循环在条件满足时执行循环体,`do-while`循环先执行一次再检查条件,`for`循环常用于已知循环次数的情况。 2. **break和continue语句**...
根据给定文件的信息,本文将深入探讨C语言中的一些关键细节问题,这些问题对于编写高质量、高效的程序至关重要。本文将从预处理器、死循环以及数据声明三个方面进行详细解析。 ### 预处理器 #### 1. 定义一年中有...
3. **播放列表**:QMediaPlaylist用于存储歌曲列表,可以动态添加或删除歌曲,并设置播放模式(如单曲循环、列表循环等)。 4. **文件选择**:可能包含一个文件选择对话框,让用户能够方便地浏览和添加本地音乐文件...
在创建班级财务管理系统时,我们需要掌握C语言的基本语法,包括变量声明、数据类型、控制结构(如if语句、for循环和while循环)、函数定义和调用等。 2. **文件操作**:为了实现财务数据的持久化存储,项目可能使用...
* 具有结构化的控制语句,包括顺序结构、选择结构、循环结构。 * 语法限制不太严格,程序设计自由度大。 * 兼有高级和低级语言的特点。 * 目标代码质量高,程序执行效率高。 * 程序可移植性好(与汇编语言比)。 三...
12. **已知循环次数的循环**:通常用`for`循环处理已知循环次数的问题,选项A正确。 13. **带`break`的`switch`语句**:如果每个`case`块都以`break`结束,可以改写为`if...else if...`结构,选项B正确。 14. **`for...
- 如题目中的例子所示,如果在一个头文件中包含了另一个头文件,并且两个头文件相互引用(即形成了循环包含),这可能会导致编译器解析出现问题。 - 示例代码: ```cpp // 文件 a.h #include "b.h" // 文件 b...
循环队列和约瑟夫环问题 循环队列是一种特殊的队列结构,它的特点是队列的末尾元素连接着队列的开头元素,形成一个环形结构。这种数据结构可以用来解决约瑟夫环问题。 约瑟夫环问题是一个经典的问题,它是由古罗马...
在C语言坦克大战中,游戏的运行依赖于一系列控制流程,包括主循环(main loop)、事件处理、定时器等。主循环负责不断刷新屏幕并处理游戏的每一轮操作,事件处理则根据用户输入或其他外部因素来改变游戏状态。定时器...
以下是一些关于`output_example.c`程序可能包含的关键知识点: 1. **初始化FFmpeg**:在程序开始时,通常需要调用`av_register_all()`和`avformat_network_init()`函数来注册所有编码器和解码器,以及初始化网络...
5. 错误处理文件(如error.c):包含了错误检查和处理的代码。 6. 可能还有其他辅助文件,如配置文件、编译脚本等。 通过分析这个C语言火车票订票管理源码,开发者可以提升C语言编程能力,了解如何设计和实现一个...
6. 错误处理和调试信息(error_handling.c, error_handling.h):提供错误处理机制,便于找出和修复程序中的问题。 7. 其他辅助文件(如makefile,用于构建和编译项目;readme.txt,介绍项目和如何运行)。 开发...
本资源提供了 C 语言程序设计面试题,涵盖了预处理指令、宏定义、预处理器、嵌入式系统、死循环、数据声明等多个方面的知识点。通过这些面试题,可以考察应试者的 C 语言基础知识、编程能力和解决问题的思维方式。 ...
在C语言中实现循环队列,我们需要定义一个结构体来表示循环队列,包括一个基础元素数组、一个队列前端指针和一个队列后端指针。例如: ```c typedef struct { QElemType *base; int front; int rear; } SqQueue;...
### Nordic51822 和 52832 的 APP_ERROR_CHECK(err_code)程序错误检查 #### 一、概述 在使用Nordic的51822或52832微控制器进行开发时,经常会遇到程序无法正常运行的情况,其中一种常见现象就是程序在运行过程中...