2013-10-08 38 views
1

我想重寫父類的子類的虛擬方法,但我得到錯誤「無法分配抽象的對象類型」。這是我的父類:無法覆蓋父類的虛擬方法導致錯誤「無法分配抽象類型的對象」

class GameState 
{ 
    public: 
     virtual ~GameState(){}; 
     virtual void captar_eventos(Tile *tiles[], Objeto * objs, Tipo * tipos, bool * quit) = 0; 
     virtual void logic(Tile *tiles[], Objeto * objs, Tipo * tipos, bool * quit) = 0; 
     virtual void render(Tile *tiles[], Objeto *objs, Tipo *tipos, float interpolacion) = 0; 
     void message(char *); 
}; 

這是我的子類:

class Menu : public GameState 
{ 
    private: 

    public: 
     Menu(); 
     ~Menu(); 
     void captar_eventos(Objeto * objs, Tipo * tipos, bool * quit); 
     void logic(Objeto * objs, Tipo * tipos, bool * quit); 
     void render(Objeto *objs, Tipo *tipos, float interpolacion); 
}; 
Menu::Menu() 
{ 
} 
Menu::~Menu() 
{ 
} 
void Menu::captar_eventos(Objeto * objs, Tipo * tipos, bool * quit){ 

} 
void Menu::logic(Objeto * objs, Tipo * tipos, bool * quit){ 

} 
void Menu::render(Objeto *objs, Tipo *tipos, float interpolacion){ 
} 

當我嘗試創建一個新的變量類菜單:

currentState = new Menu(); 

我得到錯誤:

cannot allocate an object of abstract type 'Menu' 
because the following virtual functions are pure within 'Menu' 
virtual void GameState::captar_eventos(Tile**, Objeto*, Tipo*, bool*) 
virtual void GameState::logic(Tile**, Objeto*, Tipo*, bool*) 
virtual void GameState::render(Tile**, Objeto*, Tipo*, float) 

爲什麼說它們是抽象的w ithin菜單?我究竟做錯了什麼?

回答

2

您嘗試在Menu中實施GameState的虛擬方法未能包含正確數目的參數。他們每個人都缺少Tile *tiles[]的論點。

這意味着Menu正在實現三種不同的方法,其中沒有一個覆蓋虛擬方法GameState。因此編譯器錯誤。

相關問題