两个相互引用的类

17 c++ compiler-construction reference

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

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

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

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

sea*_*n e 30

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

class App;
Run Code Online (Sandbox Code Playgroud)

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

class Window;
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 我无法过分强调在 **源** 文件中包含具有实际定义的头文件而不是头文件的重要性。我已经有了前向声明,但在阅读本文之前我一直遇到“重新定义错误”。真是个脑残啊..无论如何,谢谢你! (5认同)

aJ.*_*aJ. 9

前进声明是要走的路.

如果您在类标题中使用指针\引用,那么双方的转发声明将适合您.

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

请参阅C++ FAQ以解决此类问题:

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


Mat*_*hen 5

您需要一个前向声明