我的代码中有错误。所有的论坛都说“在这种情况下,使用Forward Declaration"。我尝试了这个并且它不起作用。
错误 C2079 Credit :: mainMenu使用未声明的MainMenu类(翻译自法语)
我修改了classe以特定于问题。
main.cpp
#include <SFML/Graphics.hpp>
#include "Menu.h"
#include "credit.h"
#include "mainmenu.h"
MainMenu *mainMenu = new MainMenu();//works here
int main(){
return 0;
}
credit.h
#ifndef DEF_CREDIT
#define DEF_CREDIT
#include <SFML/Graphics.hpp>
#include "Menu.h"
class MainMenu;
class Credit : public Menu
{
private:
MainMenu mainMenu = MainMenu();//DON'T WORK HERE
};
#endif
mainmenu.h
#ifndef DEF_MAINMENU
#define DEF_MAINMENU
#include <SFML/Graphics.hpp>
#include "Menu.h"
#include "credit.h"
class MainMenu :public Menu
{
private:
Credit credit = Credit();//work
};
#endif
拳头我加载main.cpp
在credit.h
之后(有一个credit.hpp
但我现在不使用该变量)
在mainmenu.h
之后(还有mainmenu.hpp
,我现在不使用变量)
提示:Menu
课程不包括任何该课程
如果你想要我可以发给你完整的代码
感谢advence!
答案 0 :(得分:1)
此问题称为circular dependency。长话短说,两个对象应该从不将另一个对象作为其子对象。
相反,您有两种选择。一种是将点与另一个
连接起来class Credit : public Menu
{
private:
MainMenu* mainMenu;
};
或者,你可以有一个经理,只有经理知道这两个对象,让他们通过经理进行互动
class Manager
{
private:
Credit credit;
MainMenu mainMenu;
};
由于技术原因,您不能拥有声明但未定义类型的成员,因为它是一个不完整的类型,并且您不能拥有类型不完整的对象。