У меня следующая иерархия:
У меня следующая иерархия:
GameStateBaseClass -> IGameStateInterface -> IntroState
У меня проблема в том, что когда я инстанцирую IntroState, используя ссылку на GameEngine (как я определяю в GameStateBaseClass), я получаю следующую ошибку:
Ошибка 1 ошибка C2664: 'IntroState::IntroState(const IntroState &)' : cannot convert parameter 1 from 'GameEngine' to 'const Short::IntroState &'
Внутри GameStateBaseClass я определяю конструктор, который принимает ссылку const GameState, а в main.cpp я передаю экземпляр игрового движка. Почему он пытается преобразовать мой параметр GameEngine в ссылку IntroState?
Вот соответствующий код:
GameStateBaseClass.hpp
class GameStateBaseClass
{
public:
GameStateBaseClass(const GameEngine &instance);
private:
GameStateBaseClass(void); // = delete; // c++1x
GameStateBaseClass(const GameStateBaseClass &instance); // = delete; // c++1x
GameStateBaseClass operator=(const GameStateBaseClass &instance); // = delete; // c++1x
// private members
const GameEngine &game_engine_instance;
}
GameStateBaseClass.cpp
GameStateBaseClass::GameStateBaseClass(const GameEngine &instance)
: game_engine_instance(instance) {
}
// IGameStateInterface.hpp
class IGameStateInterface : GameStateBaseClass
{
public:
virtual void Init() = 0;
virtual void Cleanup() = 0;
... // other virtual void methods...
}
IntroState.hpp
class IntroState : public IGameStateInterface
{
virtual void Init() {}
virtual void Cleanup() { }
// other empty bodies
}
Вот файл .hpp игрового движка, GameEngine.hpp
// forward declaration
class IGameStateInterface;
class GameEngine
{
public:
void Init();
void CLeanup();
void SetState(IGameStateInterface *state);
void AddState(IGameStateInterface *state);
// ... other methods for the engine
};
В моем main.cpp есть следующее:
int main(...) {
GameEngine engine_intance;
// instantiate the engine
engine_instance.Init();
// load the intro state
engine_instance.AddState(new IntroState(engine_instance));
// main loop
....
return 0;
}
Я бы хотел, чтобы он просто использовал конструктор, который я определил в GameStateBaseClass, тот, который принимает ссылку const GameEngine для создания IntroState, а не тот, который он пытается преобразовать в сообщении об ошибке.
Есть идеи?
Проблема в том, что когда я создаю IntroState, используя ссылку GameEngine (как я определяю в GameStateBaseClass), я получаю следующую ошибку:
Ошибка 1 ошибка C2664: 'IntroState::IntroState(const IntroState &)' : cannot convert parameter 1 from 'GameEngine' to 'const Short::IntroState &'
Внутри GameStateBaseClass я определяю конструктор, который принимает ссылку const GameState, а в main.cpp я передаю экземпляр игрового движка. Почему он пытается преобразовать мой параметр GameEngine в ссылку IntroState?
Вот соответствующий код:
GameStateBaseClass.hpp
class GameStateBaseClass
{
public:
GameStateBaseClass(const GameEngine &instance);
private:
GameStateBaseClass(void); // = delete; // c++1x
GameStateBaseClass(const GameStateBaseClass &instance); // = delete; // c++1x
GameStateBaseClass operator=(const GameStateBaseClass &instance); // = delete; // c++1x
// private members
const GameEngine &game_engine_instance;
}
GameStateBaseClass.cpp
GameStateBaseClass::GameStateBaseClass(const GameEngine &instance)
: game_engine_instance(instance) {
}
// IGameStateInterface.hpp
class IGameStateInterface : GameStateBaseClass
{
public:
virtual void Init() = 0;
virtual void Cleanup() = 0;
... // other virtual void methods...
}
IntroState.hpp
class IntroState : public IGameStateInterface
{
virtual void Init() {}
virtual void Cleanup() { }
// other empty bodies
}
Вот файл .hpp игрового движка, GameEngine.hpp
// forward declaration
class IGameStateInterface;
class GameEngine
{
public:
void Init();
void CLeanup();
void SetState(IGameStateInterface *state);
void AddState(IGameStateInterface *state);
// ... other methods for the engine
};
В моем main.cpp есть следующее:
int main(...) {
GameEngine engine_intance;
// instantiate the engine
engine_instance.Init();
// load the intro state
engine_instance.AddState(new IntroState(engine_instance));
// main loop
....
return 0;
}
Я бы хотел, чтобы он просто использовал конструктор, который я определил в GameStateBaseClass, тот, который принимает ссылку const GameEngine для создания IntroState, а не тот, который он пытается преобразовать в сообщении об ошибке.
Есть идеи?