两个相互引用的类

时间:2009-06-15 01:52:01

标签: c++ compiler-construction reference

我是C ++的新手,所以这个问题可能是基本的:

我有两个需要相互引用的类。每个都在自己的头文件中,#include是另一个头文件。当我尝试编译时,我得到错误“ISO C ++禁止声明'Foo'没有类型”的一个类。如果我切换东西,那么首先解析相反的头,我得到与另一个类相同的错误。

C ++中是否有可能有两个需要相互引用的类?

更多细节:我有一个“App”类和一个“Window”类。应用程序需要引用Window来创建窗口。 Window有一个回调App的按钮,因此需要引用App。如果我不能让两个班级互相引用,有没有更好的方法来实现呢?

3 个答案:

答案 0 :(得分:29)

只要标题中没有实现依赖项,就可以在头文件中使用前向声明来绕过循环依赖项。在Window.h中,添加以下行:

class App;

在App.h中,添加以下行:

class Window;

在类定义之前添加这些行。

然后在源文件中,您可以包含实际类定义的标题。

如果您的类定义引用其他类的成员(例如,在内联中),则需要将它们移动到源文件(不再内联)。

答案 1 :(得分:8)

前进声明是要走的路。

如果您在类标题中使用指针\引用,则双方的转发声明对您有用。

如果要将对象创建为类成员,则必须包含标题本身。 (前向声明不起作用,因为编译器需要类定义来了解大小)。

Refer C++ FAQ for solving such senario:

如果要将Window创建为成员,则在App中包含Window标题,但同时Window不应包含App的标题。使用指向App的指针和那里的前向声明。

答案 2 :(得分:4)

您需要forward declaration