У меня есть 3 класса 1) GameStateManager 2) MenuState (наследуется от другого класса под названием GameState) 3) GameStateОшибка Проходя этот указатель в качестве аргумента в конструктор класса
я хочу передать этот указатель в качестве аргумента конструктора MenuState в.
Моя цель - получить указатель на объект GameStateManager в MenuState для будущего использования.
Я получаю ошибки:
error C2061: syntax error: identifier 'GameStateManager'
error C2664: 'MenuState::MenuState(const MenuState &)': cannot convert argument 1 from 'GameStateManager' to 'const MenuState &'
note: Reason: cannot convert from 'GameStateManager' to 'const MenuState'
GameStateManager.h
#pragma once
#include <vector>
#include <SFML/Graphics.hpp>
#include "MenuState.h"
class GameStateManager {
public:
static const int MENUSTATE = 0;
static const int FIRSTLEVELSTATE = 1;
GameStateManager();
~GameStateManager();
private:
std::vector<GameState*> States;
int currentState;
};
GameStateManager.cpp
GameStateManager::GameStateManager() {
this->currentState = MENUSTATE;
this->States.push_back(new MenuState(*this)); // Error Line. I Think!
}
MenuState.h
#pragma once
#include "GameState.h"
#include "GameStateManager.h"
class MenuState: public GameState{
public:
MenuState(GameStateManager& gsm);
~MenuState();
};
MenuState.cpp
MenuState::MenuState(GameStateManager& gsm){ // Error Line. I Think!
}
GameState.h
#pragma once
#include <SFML/Graphics.hpp>
class GameState {
//Virtual methods are here in this code which are not important for this question
public:
GameState() {}
~GameState() {}
};
main.cpp
#include <SFML/Graphics.hpp>
#include "GameStateManager.h"
int main(int argc, char** argv) {
GameStateManager gsm;
}
У вас есть циклическая зависимость от пути. Нужно ли 'MenuState.h' действительно включать GameStateManager.h? Я имею в виду передовое объявление GameStateManager и удаление #include «GameStateManager.h» из MenuStat.h, это можно исправить. – drescherjm
Сообщение об ошибке относится к конструктору копирования. «Строка ошибок» не имеет никакого отношения к контексту конструктора копирования. Вам нужно отредактировать свой вопрос и предоставить [mcve]. –
*** ошибка C2664: 'MenuState :: MenuState (const MenuState &)': не может преобразовать аргумент 1 из 'GameStateManager' в 'const MenuState &' *** Эта ошибка вызвана кодом, который не представлен. – drescherjm