Как правильно создать GSM? - PullRequest
0 голосов
/ 26 апреля 2019

Я пишу свой семестровый проект, и он должен быть сделан на C ++, и я больше на других языках. Я хотел бы создать вещь, которая управляет моими игровыми состояниями, но я не очень хорошо себя чувствую. Я создал ту же систему управления состоянием игры на Java и хотел бы сохранить тот же подход.

gsm.h

#pragma once

#include <iostream>
#include <map>

#include "gamestate.h"

class GameStateManager {
private:
    std::map<int, GameState> gameStates;
    GameState currentState;
public:
    GameStateManager();
    void method();
    void add(int id, GameState state);
};

gsm.cpp

#include "gsm.h"
#include "playstate.h"

GameStateManager::GameStateManager() {
}

void GameStateManager::add(int id, GameState state) {
    gameStates.insert(id, state);
}

void GameStateManager::method() {
    currentState.method();
}

gamestate.h

#pragma once

#include "gsm.h"

class GameState {
protected:
    GameStateManager gsm;
public:
    GameState(GameStateManager gsm);
    virtual void method();
};

gamestate.cpp

#include "gamestate.h"

GameState::GameState(GameStateManager gsm) : gsm(gsm) { }

playstate.h

#pragma once

#include "gamestate.h"

class PlayState : public GameState {
public:
    PlayState(GameStateManager gsm);
    void method() override;
};

playstate.cpp

#include "playstate.h"
#include "gamestate.h"
#include <cstdio>

PlayState::PlayState(GameStateManager gsm): GameState(gsm) {}

void PlayState::method() {
    printf("Say hello");
}

main.cpp

#include "gamestate.h"
#include "gsm.h"
#include "playstate.h"

int main() {
    GameStateManager gsm;
    PlayState playState(gsm);
    gsm.add(0, playState);
}

Я получил много ошибок, таких как: 'GameState': необъявленный идентификатор, синтаксическая ошибка: неопределитель 'GameState'

...