我创建了一个简单的游戏引擎,切换场景几乎没有问题。
我有2个班级:游戏和场景
在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;
};
这样,当尝试切换场景时,我丢失了游戏类定义,并得到此错误:
error: invalid use of incomplete type ‘class Game’
game->switchScene(new Scene("A"));
我该怎么办?如何在场景中引用游戏对象?
答案 0 :(得分:0)
如果您在Scene
头文件中向前声明Game.hpp
,则可以同时删除#include "Scene.hpp"
(实际上应该是)和另一个头中的#include "Game.hpp"
文件
剩下的可能的问题是两个源文件都需要包括两个头文件。