头文件循环引用的问题
我有三个类,分别用 A、B、C 表示(也代表对应的头文件)。如下:
A 包含 C,且 C 是 A 的成员;B 包含 A,A 是 B 的成员;C 包含 B,B 是 C 的基类。
请问如何解决……
[解决办法]
UP
[解决办法]
class A;
class B
{
public:
A *a;
........
};
差不多这样吧
[解决办法]
不明白,帮顶!
[解决办法]
up
[解决办法]
班门弄斧一下,不知道是不是这样
class A;
class B;
class C;
class B
{
A *ax;
};
class C:B
{
B *bx;
int y;
};
class A
{
C cx;
};
[解决办法]
肯定要有一个是指针,否则这样一个循环嵌套的对象的size岂不要“无限大”。
不过偶主要是来接分的。
[解决办法]
同意:cnhgj(戏子) (没时间练太极) !
楼主遇到的是一个很常见的问题.
通常的解决方法有两个:
一:从设计上消除这种类于类之间的倚赖.
二:不要在一个类中直接定义另一个类的对象,而是定义另一个类指针.然后在构造函数中new 出来.
定义指针的话只需要,类的声明即可(也就是cnhgj(戏子) (没时间练太极) 介绍的方法)
[解决办法]
这也属于循环定义的一种吧.
应该随便弄掉一个就可以了.解除循环定义,其他就是前置声明的问题了.
假设,解除A 包含 C 的关系:
需要c.h //这里可以免除这个需求
直接class C;
class A{ C*}:
需要a.h
class B { A }
需要b.h
class C : public B
回答问题不是我的目的,主要是看中了200分.
[解决办法]
~仔细想想,还是classB下手比较稳妥.
[解决办法]
只是觉得这么设计不好。
如果必须这样的话,用指针应该可以阿,需要先声明一下。
[解决办法]
类类型成员都使用指针 ~~
[解决办法]
up
[解决办法]
A.h:
#ifndef C_A
#define C_A
#include "C.h "
class A
{
C* c;
};
#endif
---------------------
B.h:
#ifndef B_H
#define B_H
#include "A.h "
class B
{
A* a;
};
#endif
---------------------
C.h:
#ifndef C_H
#define C_H
#include "B.h "
class C: public B
{
};
#endif
[解决办法]
这里没有重复包含的问题,不会用到
class A;
class B
{
A* tt;
}
这种情况
[解决办法]
HewpKanXue() ,htqx(航天奇侠), htqx(航天奇侠)
的办法都行。
不过,总觉得应该先检查一下自己的类关系设计。
父亲需要包含(用成员对象)一个有儿子在内的对象,还是只是需要知道(用指针)那个对象在哪里。
应该有一个指针。
[解决办法]
我也遇到这种问题,用声明.
[解决办法]
up
[解决办法]
一句话搞的那么复杂:
1: B 是 C 的基类。
2: C 是 A 的成员;A 是 B 的成员;
[解决办法]
1:C.h 中要有#include <B.h>
2:A 中用到C的文件中要#include <C.h> , 同理B