前向声明:未定义 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;
};
出于技术原因,您不能拥有已声明但未定义类型的成员,因为它是不完整的类型,并且您不能拥有不完整类型的对象。
我的代码有错误。所有论坛都说 "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;
};
出于技术原因,您不能拥有已声明但未定义类型的成员,因为它是不完整的类型,并且您不能拥有不完整类型的对象。