error C2504 base class undefined

之前写程序时,最喜欢把类的头文件全部放到stdafx.h 或类似自定义的某个头文件中(如include_files.h),然后在不同的文件中需要调用别的文件中的类或变量或函数什么的,只要直接#include "include_files.h"就行了,今天终于遇到了error C2504错误。具体说明如下:

     

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

[cpp]  view plain copy
  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]  view plain copy
  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吧。。。



最后的最后,父类要在子类之前#include进来。不然会有未定义的基类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值