我最近在C ++中使用虚方法/继承遇到了一些麻烦

首先,如果我尝试扩展超类,则会出现此错误:


  “未定义对GameState :: GameState()的引用”


但是,如果我一起删除所有构造函数,则不会得到上述错误,但最终会出现在调用虚方法时发生的分段错误。

这是我的代码:

#ifndef GAMESTATE_H
#define GAMESTATE_H

#include <stdlib.h>

#include "Resources.h"
#include "Renderer.h"

class GameState {
public:
    GameState();
    virtual void init(Resources *res) = 0;
    virtual void exit() = 0;
    virtual void update() = 0;
    virtual void render(Renderer *renderer) = 0;
};

#endif // GAMESTATE_H


这是子类:

#include "GameState.h"

class MainGameState : public GameState {
public:
    MainGameState() : GameState() {

    }

    virtual void init(Resources *res) {

    }

    virtual void update() {
        printf("test\n");
    }

    virtual void render(Renderer *renderer) {

    }

    virtual void exit() {

    }
private:
    SDL_Surface *image;
};

最佳答案

尝试

GameState() { }


代替

GameState();


或在其他地方定义它。

不过,我不确定它是否与虚方法有关。我认为其他地方存在错误。也许,未初始化的指针?

关于c++ - C++未定义抽象类构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9422072/

10-14 15:14
查看更多