#include "B.h"
class A
{
B b;
}
A.cpp如下
#include "A.h"
class A
{
...
}
B.h如下
#include "A.h"
class B
{
A a;
}
B.cpp如下
#include "B.h"
class B
{
...
}
如果文件是上述这种情况,则编译出现找不到类型,因为头文件中A包含了B头文件,B中又包含了A头文件,这种循环包含会导致编译出错。
解决办法
解决办法采用前置声明。
改后代码如下
A.h如下
class B;
class A
{
B b;
}
A.cpp如下
#include "A.h"
#include "B.h"
class A
{
...
}
B.h如下
class A
class B
{
A a;
}
B.cpp如下
#include "B.h"
#include "A.h"
class B
{
...
}
如果想一劳永逸呢?
对于经常用到的模块的头文件,可以统一写一份前置声明文件,将常用的声明都写入这个头文件,比如叫做includeDeclare.h,然后将其实际的头文件都放入一个文件,比如includeHeaders.h中。这样后续其他地方使用的时候,只要在头文件中引入includeDeclare.h,在实现cpp文件中引入includeHeaders.h。
原文:https://blog.51cto.com/ggwhsd/2438782