include头文件的陷阱

总的来说,这是一个很傻瓜的错误,但竟然浪费了我一天半的时间~~~~~暴汗,不过,也让我学到好多东西~~~~呵呵,希望各位新手朋友不用犯我这个错误。

这两天写的程序里有个小功能,需要一个从CWinThread继承的线程a和主对话框Dlg进行通讯,在主对话框中需要用到线程a,则我在头文件Dlg.h中 #include “a.h”,而在线程a中,也需要用到主对话框中定义的变量,我便在线程的头文件中加进 #include "Dlg.h" .

然后问题就出现了,在编译的时候,便出现2个错误,指向Dlg.h中定义的线程对象有问题,没有加分号,这肯定是不可能的。在网上查了很久,才发现,原来是陷入了头文件循环嵌套的陷阱,.h文件递归包含了。

比如有2个类,类A和类B ,
在A中,需要用到B所在文件中的变量;在B中,需要用到A所在文件中的变量(当然,有些是可以避免的)
则:

#include "A.h" //在B.h 中
#include "B.h" //在A.h 中

结果出现了.h文件的递归包含,编译时出现错误。错误一般会是不相干的,说少加分号之类。

解决的方法有以下几种:

1. 如果在A中,需要用到类B的对象,我们除了#include "B.h",还可以直接在使用前,再声明一下B

Class B;就可以了。

2.如果只是在A.cpp 中用到B,则可以把#include "B.h" 写在A.cpp 文件中。

3.尽量避免出现两个头文件中互相需要对方定义的变量。

另:

使用include和声明的区别:

前者需要编译构造函数;后者不需要,只是告诉编译器这是一个类,并不为这个类实际分配存储空间。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值