• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
chance的博客
   首页    新随笔    联系   管理    订阅  订阅
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;
}

posted on 2012-03-09 09:59  Chance_yin  阅读(368)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3