2

我有 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'”的编译器错误。

我知道我可以将它们组合到一个头文件中,它们会起作用,但实际上它们都是非常大的类,我真的希望它们有自己的头文件用于组织目的。

有没有办法解决这个问题?

谢谢,亚历克斯

4

1 回答 1

4

您添加了前向声明,但没有删除include. 这样做,你就是金子。

实际上,删除两个包含,并用前向声明替换它们。

// class1.h

class ClassTwo;

class ClassOne {
    ClassTwo* c2;
};


// class2.h

class ClassOne;

class ClassTwo {
    ClassOne* c1;
};

请注意,实际上需要循环依赖的情况很少而且相距甚远,因此至少要审查设计。

于 2012-08-09T21:34:47.123 回答