前向声明:未定义 Class (C2079)

Forward Declaration: Undefined Class ( C2079 )

我的代码有错误。所有论坛都说 "in this situation, use Forward Declaration"。我试过了,但没用。

错误是 C2079 Credit::mainMenu 使用 class 未声明的 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 class 不包括任何 class

如果你想要,我可以把完整的代码发给你

提前致谢!

此问题称为 circular dependency。长话短说,两个对象 永远不会 有另一个作为其子对象。

相反,您有两个选择。一个是有一个到另一个

class Credit : public Menu
{
private:
    MainMenu* mainMenu;
};

或者,您可以有一个管理器,其中只有管理器知道两个对象,并让它们通过管理器进行交互

class Manager
{
private:
    Credit credit;
    MainMenu mainMenu;
};

出于技术原因,您不能拥有已声明但未定义类型的成员,因为它是不完整的类型,并且您不能拥有不完整类型的对象。