【发布时间】:2019-05-11 05:55:56
【问题描述】:
我正在开发一款游戏,现在我已经按照 GameState 管理器教程进行操作,但我不确定为什么代码不起作用。可能是因为它是教程中的旧版 c++,但我似乎找不到如何修复它。
#pragma once
#include "GameEngine.h"
class GameState
{
public:
virtual void Init() = 0;
virtual void Cleanup() = 0;
virtual void SplashScreen() = 0;
virtual void Pause() = 0;
virtual void Resume() = 0;
virtual void HandleEvents(GameEngine *game) = 0;
virtual void Update(GameEngine *game) = 0;
virtual void Draw(GameEngine *game) = 0;
void ChageState(GameEngine* game,
GameState* state) {
game->ChangeState(state);
}
protected: GameState() {}
};
如果我不玩 GameEgine *game 和 GameState *state 并删除使用它们的每一行,我的程序可以正常工作,我的窗口会出现,但我无法更改非常重要的游戏状态。 如果没有人有答案也没关系:)
编辑:我忘了显示 GameEngine.h 文件
#pragma once
#include "GameState.h"
#include "include.h"
class GameEngine
{
public:
Recources recource;
void Init(std::string name, int x, int y);
void Cleanup();
void SplashScreen();
void ChangeState(GameState* state);
void PushState(GameState* state);
void PopState();
void HandleEvents();
void Update();
void Draw(sf::RenderWindow &widnow);
bool Running() { return m_running; }
void Quit() { m_running = false; }
private:
// the stack of states
std::vector<GameState*> states;
bool m_running;
};
【问题讨论】:
-
公平地说,我们需要比这更多的代码来找出它不适合你的原因。看看你能不能买到MCVE
-
您有循环包含,您需要在其中一个标题中转发声明一个类而不包含它
-
您没有显示尝试使用
GameState和GameEngine的代码,那么我们如何才能告诉您该代码有什么问题?也就是说,我确实看到错误的一件事是您的两个头文件相互循环引用。你需要打破这个圈子,使用forward declarations。
标签: c++