我有以下層級構造:C++使用不正確的參數類型來構造對象
我有以下層次結構:
GameStateBaseClass -> IGameStateInterface -> IntroState
我遇到的問題是,當我實例化一個使用GameEngine引用的IntroState(如我在GameStateBaseClass中定義的)我得到以下錯誤:
Error 1 error 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
}
這裏的比賽演義NE .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,而不是它想要在錯誤消息中轉換的那個。
任何想法?
我遇到的問題是,當我實例使用GameEngine參考IntroState(正如我在GameStateBaseClass定義),我收到以下錯誤:
Error 1 error C2664: 'IntroState::IntroState(const IntroState &)' : cannot convert parameter 1 from 'GameEngine' to 'const Short::IntroState &'
在GameStateBaseClass我定義一個構造函數一個const遊戲狀態參考,並在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
}
這裏的比賽演義ne .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 :: IntroState(GameEngine&)'或類似的。那麼'新的IntroState(engine_instance)'應該如何工作? – 2011-12-22 08:53:29
你的問題有點混亂,包括10個不同的代碼片段。你應該嘗試將問題提取到一個最小的場景,否則可能需要在必要時發佈源代碼(最好是可編譯的),如下所示:https://gist.github.com/1509689 – gilligan 2011-12-22 09:39:26