循环引用的问题

FatGarfield 2002-11-19 05:36:51
我在VC++下编了一个程序,用了自定义的两个类C1, C2,我需要C1类的对象知道C2类的信息,切C2类的对象知道C1类的信息。所以需要C1.h包含C2.h并且C2.h包含C1.h,这样产生了循环引用问题,编译时出现错误,请问如何解决?
...全文
394 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
boolean6199 2002-11-20
  • 打赏
  • 举报
回复
SOMEHEAD_H
这样的定义更合理~
北极猩猩 2002-11-20
  • 打赏
  • 举报
回复
向通用的情况一样,在所有.h文件中加入
#ifndef SOMEHEAD_H
#define SOMEHEAD_H
.......
#endif
dhy311 2002-11-20
  • 打赏
  • 举报
回复
搂主说的那个是相当于递归,显示生活中有这样的对象嘛?
ji_da_sheng 2002-11-20
  • 打赏
  • 举报
回复
你可以这样:
class B;
class A
{
....
};
class B
{
....
};
你将它们放在同一个文件里就行了。
sokoban 2002-11-20
  • 打赏
  • 举报
回复
#ifndef
#define
...
#endif
middle 2002-11-19
  • 打赏
  • 举报
回复
你可以这样做:
class A
{
B* B;
}

class B
{
A* A;
}

这个时候你仅仅需要在两个.h文件中分别加入class A;和class B;这两个前向声明就可以了,无需include对方的.h文件。

或者可以将其中某个指针改成成员对象,这个时候只要在改动的那个.h中包含另一个.h就可以了。

如果你两个都改成成员对象了———— #@$%^&*&(*(*
caizzrr 2002-11-19
  • 打赏
  • 举报
回复
agree with softman_2000(vc小虫)
boolean6199 2002-11-19
  • 打赏
  • 举报
回复
没有亲自验证过,大家讨论。
boolean6199 2002-11-19
  • 打赏
  • 举报
回复
可以试一下条件编译,例如:
//c1.h
#ifndef CLASS_C2
#include c2.h
#endif
……//文件主体
//c2.h
#define CLASS_C2

#ifndef CALSS_C1
#include c1.h
#endif
……//文件主体

//具体没碰到过这样的情况,因而没真正使用过,可以试一下。
//事实上如果这样的话,我想可以解决更多的麻烦:

//c1.h
#ifndef CLASS_C1
#define CLASS_C1
……//文件主体
#endif

//c2.h
#ifndef CLASS_C2
#define CLASS_C2
……//文件主体
#endif

//这样即使重复、嵌套include也没问题。
softman_2000 2002-11-19
  • 打赏
  • 举报
回复
你可以这样试一下
c1.h文件
class C2; //说明一下c2,告诉c1,类c2已经存在。
class C1
{
public:
C1();
};
c1.cpp文件中
#include "c1.h" //包含头文件。
C1::C1()
{
}

c2.h文件中
class C1;
class C2
{
public:
C2();
};
c2.cpp中
#include "c1.h"
C2::C2()
{
}
_铭子_ 2002-11-19
  • 打赏
  • 举报
回复
你在你的
c1.h里
这样:
class C2.//放在C1声明的前面。完成C2的声明。
不要在包含C2的头文件了。
你试一下,不行的话,给我发短信。

70,031

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧