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)
在类定义之前添加这些行.
然后在源文件中,您可以包含实际类定义的标头.
如果您的类定义引用另一个类的成员(例如,在内联中),则需要将它们移动到源文件(不再是内联).
前进声明是要走的路.
如果您在类标题中使用指针\引用,那么双方的转发声明将适合您.
如果要将对象创建为类成员,则必须包含标题本身.(前向声明不起作用,因为编译器需要类定义来了解大小).
如果您将窗口创建为成员,则在App中包含Window标头,但同时Window不应包含App的标头.使用指向App的指针和那里的前向声明.