课程互相使用?

时间:2012-08-09 21:33:39

标签: c++ visual-studio-2010

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

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

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

谢谢, 亚历

1 个答案:

答案 0 :(得分:4)

您添加了转发声明,但未删除include。那样做,你就是金色的。

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

// class1.h

class ClassTwo;

class ClassOne {
    ClassTwo* c2;
};


// class2.h

class ClassOne;

class ClassTwo {
    ClassOne* c1;
};

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