一、问题描述
假设有两个类A、B,若在A类里面包含B,或在B类里面包含A,则编译无法通过,任意去掉A,pA,或者B,pB,则编译通过。
编译错误提示:
error C2143: syntax error : missing ';' before '*'
1>d:\backup\我的文档\visual studio 2008\projects\rowdemo\正在开发中~~~\rowdemo\rowdemo\rowdemo\matchdlg.h(249) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\backup\我的文档\visual studio 2008\projects\rowdemo\正在开发中~~~\rowdemo\rowdemo\rowdemo\matchdlg.h(249) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
//A类文件
include "B.h"
Class A
{
````
public:
B* pB;
````
}
//B类文件
include "A.h"
Class B
{
````
public:
A* pA;
````
}
二、解决问题
这是典型的头文件相互包含的问题,解决方法是:
1、在A的头文件加上class B
//A类文件
class B;
Class A
{
````
public:
B* pB;
````
}
2、同时在其源文件中加上include "B.h"即可。
//A类源文件 .cpp
include "B.h"
但是奇怪的是,若不是定义成指针的话B bb;,编译又不能通过,提示:
error C2079: 'CDlg2::Dlg1' uses undefined class 'CDlg1'
csdn论坛相关帖子:
http://topic.csdn.net/u/20090528/17/6212a38f-01a8-48ec-a3aa-2941785add93.html
http://topic.csdn.net/u/20100426/22/de777f2e-7f1c-4635-b5bf-6435b72feeee.html