`

循环包含问题:error C2504

 
阅读更多

 

之前写程序时,最喜欢把类的头文件全部放到stdafx.h (解决的方法,只是把第三方的头文件放到一个公共的地方,别把自己写的头文件也放进去,不然就会出现这种情况)或类似自定义的某个头文件中(如include_files.h),然后在不同的文件中需要调用别的文件中的类或变量或函数什么的,只要直接#include "include_files.h"就行了,今天终于遇到了error C2504错误。具体说明如下:

 

      有以下几个文件:include_files.h AA.h AA.cpp BB.h BB.cpp

Cpp代码   收藏代码
  1. //include_files.h    
  2. #pragma once    
  3. ...    
  4. #include "AA.h"    
  5. #include "BB.h"    
  6. ...    
  7.     
  8. // AA.h    
  9. #include "include_files.h"    
  10. class AA    
  11. {    
  12. public: ...    
  13. };    
  14.     
  15. // BB.h    
  16. #include "include_files.h"    
  17. class BB : public AA    
  18. {    
  19. public: ...    
  20. }    

编译后就会报错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还没有明确定义,所以才报了错。即如下一个过程。

Cpp代码   收藏代码
  1. 编译AA.h...    
  2.     编译include_files.h    
  3.         编译AA.h, 根据#pragam once跳过    
  4.          编译BB.h    
  5.            编译include_files.h,根据#pragam once跳过    
  6.              编译class BB : public AA    
  7.            报错:error C2504:未定义基类AA...   

 

所以以后不能把类定义的头文件随便扔在一块了,还是勤快些,在用到时才#include吧。。。

分享到:
评论

相关推荐

    2021年电大C语言程序设计形成性考核册答案.doc

    解释:在C语言中,for循环可以被用来解决循环次数已知的问题。 16. 在下面循环w语句中内层循环体S语句执行次数为n(n+1)/2。 解释:在C语言中,循环体的执行次数可以通过数学公式来计算。 17. 在下面do循环语句中,...

    C语言循环结构程序设计编程题.pdf

    1. **循环语句**:C语言中的循环语句包括`while`、`do-while`和`for`。`while`循环在条件满足时执行循环体,`do-while`循环先执行一次再检查条件,`for`循环常用于已知循环次数的情况。 2. **break和continue语句**...

    c语言十大细节问题!

    根据给定文件的信息,本文将深入探讨C语言中的一些关键细节问题,这些问题对于编写高质量、高效的程序至关重要。本文将从预处理器、死循环以及数据声明三个方面进行详细解析。 ### 预处理器 #### 1. 定义一年中有...

    Qt-MusicPlayer_MainWindow音乐_qt音乐播放器_QT_音乐播放器_

    3. **播放列表**:QMediaPlaylist用于存储歌曲列表,可以动态添加或删除歌曲,并设置播放模式(如单曲循环、列表循环等)。 4. **文件选择**:可能包含一个文件选择对话框,让用户能够方便地浏览和添加本地音乐文件...

    c语言大作业班级财务 管理系统

    在创建班级财务管理系统时,我们需要掌握C语言的基本语法,包括变量声明、数据类型、控制结构(如if语句、for循环和while循环)、函数定义和调用等。 2. **文件操作**:为了实现财务数据的持久化存储,项目可能使用...

    C语言c语言入门.pptx

    * 具有结构化的控制语句,包括顺序结构、选择结构、循环结构。 * 语法限制不太严格,程序设计自由度大。 * 兼有高级和低级语言的特点。 * 目标代码质量高,程序执行效率高。 * 程序可移植性好(与汇编语言比)。 三...

    电大C语言作业及答案.pdf

    12. **已知循环次数的循环**:通常用`for`循环处理已知循环次数的问题,选项A正确。 13. **带`break`的`switch`语句**:如果每个`case`块都以`break`结束,可以改写为`if...else if...`结构,选项B正确。 14. **`for...

    error C4430 缺少类型说明符

    - 如题目中的例子所示,如果在一个头文件中包含了另一个头文件,并且两个头文件相互引用(即形成了循环包含),这可能会导致编译器解析出现问题。 - 示例代码: ```cpp // 文件 a.h #include "b.h" // 文件 b...

    循环队列和约瑟夫环问题

    循环队列和约瑟夫环问题 循环队列是一种特殊的队列结构,它的特点是队列的末尾元素连接着队列的开头元素,形成一个环形结构。这种数据结构可以用来解决约瑟夫环问题。 约瑟夫环问题是一个经典的问题,它是由古罗马...

    C语言坦克大战源码

    在C语言坦克大战中,游戏的运行依赖于一系列控制流程,包括主循环(main loop)、事件处理、定时器等。主循环负责不断刷新屏幕并处理游戏的每一轮操作,事件处理则根据用户输入或其他外部因素来改变游戏状态。定时器...

    ffmpeg Vc下编译的output_example.c

    以下是一些关于`output_example.c`程序可能包含的关键知识点: 1. **初始化FFmpeg**:在程序开始时,通常需要调用`av_register_all()`和`avformat_network_init()`函数来注册所有编码器和解码器,以及初始化网络...

    c语言火车票订票管理源码

    5. 错误处理文件(如error.c):包含了错误检查和处理的代码。 6. 可能还有其他辅助文件,如配置文件、编译脚本等。 通过分析这个C语言火车票订票管理源码,开发者可以提升C语言编程能力,了解如何设计和实现一个...

    C语言大作业 一个药品管理系统.zip

    6. 错误处理和调试信息(error_handling.c, error_handling.h):提供错误处理机制,便于找出和修复程序中的问题。 7. 其他辅助文件(如makefile,用于构建和编译项目;readme.txt,介绍项目和如何运行)。 开发...

    C语言程序设计面试题

    本资源提供了 C 语言程序设计面试题,涵盖了预处理指令、宏定义、预处理器、嵌入式系统、死循环、数据声明等多个方面的知识点。通过这些面试题,可以考察应试者的 C 语言基础知识、编程能力和解决问题的思维方式。 ...

    循环队列的学习解析以及C语言实现.doc

    在C语言中实现循环队列,我们需要定义一个结构体来表示循环队列,包括一个基础元素数组、一个队列前端指针和一个队列后端指针。例如: ```c typedef struct { QElemType *base; int front; int rear; } SqQueue;...

    Nordic51822 和 52832 的 APP_ERROR_CHECK(err_code)程序错误检查

    ### Nordic51822 和 52832 的 APP_ERROR_CHECK(err_code)程序错误检查 #### 一、概述 在使用Nordic的51822或52832微控制器进行开发时,经常会遇到程序无法正常运行的情况,其中一种常见现象就是程序在运行过程中...

Global site tag (gtag.js) - Google Analytics