我有2个包含2个类的头文件。每个类都依赖于其他类,如下所示:
// class1.h
#include "class2.h"
class ClassOne {
ClassTwo* c2;
};
// class2.h
#include "class1.h"
class ClassTwo {
ClassOne* c1;
};
我希望代码不要编译,所以我在其中一个标题中添加了一个前向声明:
// class1.h
#include "class2.h"
class ClassTwo;
class ClassOne {
ClassTwo* c2;
};
但遗憾的是,这也行不通。我一直在为“使用未定义类型'ClassTwo'”而遇到编译器错误。
我知道我可以将它们合并到一个头文件中并且它们可以工作,但实际上它们都是非常大的类,我真的希望它们有自己的头文件用于组织目的。
有没有办法解决这个问题?
谢谢, 亚历
答案 0 :(得分:4)
您添加了转发声明,但未删除include
。那样做,你就是金色的。
实际上,删除两个包含,并用前向声明替换它们。
// class1.h
class ClassTwo;
class ClassOne {
ClassTwo* c2;
};
// class2.h
class ClassOne;
class ClassTwo {
ClassOne* c1;
};
请注意,实际需要循环依赖的情况很少且相距很远,因此至少要检查设计。