c ++ [gamestate]函数未接受正确的参数错误

时间:2018-12-04 16:01:36

标签: c++ visual-studio

您好,我在编译代码时遇到问题

我遵循http://gamedevgeek.com/tutorials/managing-game-states-in-c/教程 但它无法编译,我也不知道为什么。

Visual Studio的错误消息 enter image description here

这是我的代码

CGameEngine修改代码

    #include <vector>
    #include "GameState.h"
    #include "GameEngine.h"

    class GameState;

    class GameStateManager
    {
    public:
        GameStateManager(GameEngine* engine, MSG * msg);
        ~GameStateManager();

        void Cleanup();
        void ChangeState(GameState* state);
        void Update();
        bool Running() { return m_running; }
        void Quit();

    private:
        std::vector<GameState *> states;
        bool m_running;
        GameEngine * m_engine;
        MSG *m_msg;
    };

    #include "GameStateManager.h"


    GameStateManager::GameStateManager(GameEngine* engine, MSG * msg)
        :m_engine{ engine }, m_msg{ msg }, m_running{ true }
    {

    }

    GameStateManager::~GameStateManager()
    {

    }

    void GameStateManager::Cleanup()
    {
        while (!states.empty()) {
            states.back()->Exit();
            states.pop_back();
        }
    }

    void GameStateManager::Quit()
    {
        m_running = false;
        m_msg->message = WM_QUIT;
    }

    void GameStateManager::ChangeState(GameState* state)
    {
        if (!states.empty()) {
            states.back()->Exit();
            states.pop_back();
        }

        states.push_back(state);
        states.back()->Enter(m_engine, m_msg);
    }

    void GameStateManager::Update()
    {
        states.back()->Update(this);
    }

CGameState修改代码

    #include "GameStateManager.h"

    class GameState
    {
    public:
        GameState() {}
        virtual ~GameState() {}
        virtual void Enter(GameEngine * , MSG * ) = 0;
        virtual void Update(GameStateManager* game) =0;
        virtual void Exit() = 0;

    };

状态类之一

#include "MainMenu.h"

class Logo :public GameState
{
public:
    Logo();
    ~Logo();

    static Logo* Instance() 
    {
        return &m_Logo;
    }

    void Enter(GameEngine * engine, MSG * msg);
    void Update(GameStateManager* game);
    void Exit();
private:

    static Logo m_Logo;

};

#include "Logo.h"

Logo::Logo()
{

}

Logo::~Logo()
{

}
void Logo::Enter(GameEngine * engine, MSG * msg)
{
    m_GameEngine_Info = engine;
    m_msg = msg;

}

void Logo::Update(GameStateManager* game)
{


}

void Logo::Exit()
{


}

编辑代码时没有编译错误,但是尝试编译时会出现此错误。

1 个答案:

答案 0 :(得分:1)

您有通函包含。使用包括防护罩并替换

#include "GameStateManager.h"

使用

class GameStateManager;

在GameState.h中。将此包含移动到GameState.cpp。

对GameStateManager.h和GameStateManager.cpp中的#include "GameEngine.h"#include "GameState.h"进行类似操作。