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)

メニュー内でそれらが抽象的であると言うのはなぜですか? 私は何を間違っていますか?

4

1 に答える 1

2

GameStateの仮想メソッドを実装しようMenuとして、正しい数の引数を含めることができませんでした。彼らはそれぞれTile *tiles[]議論を欠いています。

これはMenu、3 つの異なるメソッドを実装することを意味し、いずれもGameState仮想メソッドをオーバーライドしません。したがって、コンパイラエラー。

于 2013-10-08T02:33:05.743 に答える