类类型作为参数,类转发

Class type as parameter, and class forward

本文关键字:转发 参数 类型      更新时间:2023-10-16

我创建了一个简单的游戏引擎,切换场景几乎没有问题。

我有2节课:游戏和场景

在游戏类中,我有 2 个指向场景的指针,以及 switchScene() 方法,我想将其共享到 Scene 对象。

在场景类中,我想有一个指向游戏对象的指针,但这不起作用。

游戏.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;
};

场景.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;
};

这样,我丢失了游戏类定义,并在尝试切换场景时出现此错误:

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

我能用这个做什么?如何将对游戏对象的引用放入场景?

如果在Game.hpp头文件中转发声明Scene,则可以删除#include "Scene.hpp"(实际上应该是)和另一个头文件中的#include "Game.hpp"

剩下的可能问题是两个源文件都需要包含两个头文件。