C2061:文件相互引用带来的另一个问题

首先,呵呵,排除掉那些脑残的没有定义某个类就使用该类的情况,直接引入两个类相互引用的情况:

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;
}

你可能感兴趣的:(文件)