【发布时间】:2012-02-23 22:02:31
【问题描述】:
我最近在使用虚拟方法/继承的 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? -
你是如何使用这些类的
-
也许发布一个示例调用。您也可以尝试询问 valgrind 是什么导致了分段错误
-
你的第一个错误是因为抽象类GameState没有给它的构造函数定义,但是MainGameState构造函数调用了它。只需将
GameState();更改为GameState() { }即可解决此问题。如果您在段错误之前告诉我们您正在调用哪个虚拟方法,我们可以在第二个方面提供更多帮助。
标签: c++ inheritance segmentation-fault abstract-class