Тип класса как параметр и класс вперед - PullRequest
0 голосов
/ 30 декабря 2018

Я создаю простой игровой движок и у меня мало проблем с переключением сцены.

У меня 2 класса: Game и Scene

В классе Game у меня есть 2 указателя на сцены, иМетод switchScene (), которым я хочу поделиться с объектами Scene.

В классе Scene я хочу иметь указатель на игровой объект, но это не работает.

Game.hpp

#pragma once
#include "Scene.cpp"

class Game{
    public:
        Game();
        ~Game();
        void init(const char* title, int width, int height, bool fullscreen, int fps);
        void switchScene(Scene* scene);
    private:
        Scene* stage = nullptr;
        Scene* tmpStage = nullptr;
};

Scene.hpp

#pragma once
#include <vector>
#include <string>
#include "Game.hpp"
class Game;

class Scene{
    public:
        Scene(std::string sceneName);
        ~Scene();
        void setGame(Game* g);
    protected:
        Game* game;
};

Таким образом, я потерял определение класса Game и получил эту ошибку при попытке переключения сцены:

error: invalid use of incomplete type ‘class Game’
 game->switchScene(new Scene("A"));

Чтоя могу сделать с этим?Как поставить ссылку на игровой объект в Scene?

1 Ответ

0 голосов
/ 30 декабря 2018

Если вы перешлите объявление Scene в заголовочном файле Game.hpp, вы можете удалить как #include "Scene.hpp" (что на самом деле должно быть), так и #include "Game.hpp" в другом заголовочном файле

.Остальная возможная проблема заключается в том, что оба исходных файла должны включать оба заголовочных файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...