C ++类作为函数的参数不起作用

时间:2019-05-11 05:55:57

标签: c++

我正在开发游戏,现在我已经遵循了GameState Manager教程,但是我不确定为什么代码不能正常工作。可能是因为它是本教程中较旧的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 *游戏和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;
};

1 个答案:

答案 0 :(得分:0)

ChangeState中的变量游戏(传递给函数)必须是对象GameEngine(其函数具有ChangeState,与GameState的ChangeState不同),因此您可以调用game-> ChangeState,因此如果您使用的GameEngine对象具有必要的功能,并且您传递正确的参数,一切都会好的。