首先,呵呵,排除掉那些脑残的没有定义某个类就使用该类的情况,直接引入两个类相互引用的情况:
OK,let's get started:
假设,现在我们有两个类 A,B
//***************************************************
"A.h"文件内容如下
class A
{
public :
void funA(B b);
}
"A.cpp"文件内容如下
#include "A.h"
void A::funA(B b)
{
b.test();
}
//***************************************************
"B.h"文件内容如下
#include "A.h"
class B
{
public :
void test();
A a;
}
显然这里 A,和B 出现了相互引用情况,如果单纯的在A.h中加入class B像下面这样:
"A.h"文件内容如下
class B;
class A
{
public :
void funA(B b);
}
还是会报错,因为在A.cpp中,又具体的用到了b.test()函数,会报useed undefined class
这时候,把从网上看到的一个解决方法贴出来(自认为方法不是很好,但是目前还不知道其他解决方法,希望有知道其他方法的朋友告诉下,先谢谢啦!!废话少说,开始说方法):
1、保留B.h 中对A.h的引入(#include "A.h")
2、去掉A.h 中对B.h的引入
3、在A.h 中加入语句 class B,提前声明B,这样在A.h中就不再会出错
4、按照步骤3来做 会在A.cpp文件中报错,这时候,在A.CPP文件中加入 #include "B.cpp" 语句
到此,问题就解决了,希望也能解决你的问题。
附:最终代码
//***************************************************
"A.h"文件内容如下
class B;
class A
{
public :
void funA(B b);
}
//***************************************************
"A.cpp"文件内容如下
#include "A.h"
#include "B.cpp"
void A::funA(B b)
{
b.test();
}
//***************************************************
"B.h"文件内容如下
#include "A.h"
class B
{
public :
void test();
A a;
}