Я хочу создать «игровой движок»/диспетчер состояний для своей игры, и теперь у меня есть проблема с C++.C++ Класс внутри другого класса с указателем на первый класс
У меня есть классная играEngine.
class gameEngine
{
public:
gameEngine();
~gameEngine();
// the stack of states
std::vector<gameState*> states;
...
};
У этого есть стек объектов gameState, когда он работает. Теперь моя проблема в том, что я хочу, чтобы в gameStates был указатель на gameEngine, так что состояния могут манипулировать им, изменять состояния и получать доступ к данным, которые нужны всем штатам.
Я думал, что могу просто иметь указатель в классе состояний и использовать construcktor, но это дает мне ошибку.
| 15 | error: 'gameEngine' не называет тип |
Это класс моих состояний.
class gameState
{
public:
gameState(gameEngine* e);
~gameState();
gameEngine* engine;//Here is the error
};
Является ли моя логика ложной, и это невозможно или как я могу ее реализовать?
Редактировать: Я попытался поставить класс gameEngine; перед моим игровым классом. Если я это сделаю, это даст мне кучу других ошибок. В целом класс gameEngine все игровые состояния теперь не объявлены компилятором.
| 16 | error: 'gameState' не был объявлен |
Везде, где я использую gameState внутри класса GameEngine.
Редактировать 2: У меня есть работа сейчас. Ответ на ответ с форвардной декларацией работал, и сначала у меня был неправильный порядок #include. Спасибо всем.
Я предполагаю, что 'gameEngine' определяется ** после **' gameState'. Поэтому 'gameState' понятия не имеет, что такое' gameEngine'. Используйте форвардную декларацию. – Rotem
Возможный дубликат [не называет ошибку типа в C++] (http://stackoverflow.com/questions/2133250/does-not-name-a-type-error-in-c) – paisanco
_ "У которого есть стек объектов gameState, когда он работает "_ no it is not –