我最近在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/