Я пишу свой семестровый проект, и он должен быть сделан на 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'