У меня есть ошибка в моем коде. На всех форумах написано «в этой ситуации используйте Forward декларации». Я попробовал это, и это не работает.
ошибка C2079 Credit :: mainMenu использовать класс MainMenu не объявлен (перевод с французского)
Я изменил класс, чтобы быть конкретным для вопроса.
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
(Eсть credit.hpp
но я не использую переменную сейчас)
после mainmenu.h
(есть также mainmenu.hpp
я не использую переменную сейчас)
совет: Menu
класс не включает ни одного из этих классов
Я могу выслать вам полный код, если вы хотите
Спасибо в адвенсе!
Эта проблема известна как круговая зависимость. Короче говоря, два объекта должны никогда иметь другой в качестве своего подобъекта.
Вместо этого у вас есть два варианта. Один должен иметь один точка другому
class Credit : public Menu
{
private:
MainMenu* mainMenu;
};
Или у вас может быть своего рода менеджер, где только менеджер знает об обоих объектах и позволяет им взаимодействовать через менеджера.
class Manager
{
private:
Credit credit;
MainMenu mainMenu;
};
По технической причине, почему вы не можете иметь член объявленного, но не определенного типа, потому что это неполный тип, и вы не можете иметь объект неполного типа.
Других решений пока нет …