我是C ++的新手,所以这个问题可能是基本的:
我有两个需要相互引用的类。每个都在自己的头文件中,#include是另一个头文件。当我尝试编译时,我得到错误“ISO C ++禁止声明'Foo'没有类型”的一个类。如果我切换东西,那么首先解析相反的头,我得到与另一个类相同的错误。
C ++中是否有可能有两个需要相互引用的类?
更多细节:我有一个“App”类和一个“Window”类。应用程序需要引用Window来创建窗口。 Window有一个回调App的按钮,因此需要引用App。如果我不能让两个班级互相引用,有没有更好的方法来实现呢?
答案 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)