称为终止的纯虚方法
Pure virtual method called terminated
我正在尝试在 C++ 中使用虚拟方法。
我有一个对象层次结构:
class Action {
public:
Action() { }
virtual void action() = 0;
}
class CubeAction : public Action {
public:
CubeAction() { }
void action() {
glutSolidCube(1);
}
};
而且我有一个用于存放基础对象的容器 class。
class ActionContainer {
private:
std::vector<Action *> actions;
public:
void add(Action &action) { actions.push_back(&action); }
void doActions() {
for (auto a : actions) {
a->action();
}
}
};
当我尝试 doActions
:
ActionContainter actions();
CubeAction cubeAction();
actions.add(cubeAction);
actions.doActions();
我收到 pure virtual method called
错误。
我用了Calling a virtual function on a vector of base classes的方案,还是报错
更新: 抱歉,这是我的真实代码:Github。我认为 Action.h
文件中存在一些错误。
您在 github 中的代码如下所示:
try {
SphereAction sphereAction(1);
actions.add(sphereAction);
CubeAction cubeAction(2);
actions.add(cubeAction);
} catch (InfoException e) {
cerr << e.what() << endl;
}
然后,您调用 display()
,它调用 ActionContainer::doActions()
。
在容器中,你存储了一个指向参数的指针,但是你传递了一个局部变量给actions.add()
,它会超出范围,使用时不再存在。
我正在尝试在 C++ 中使用虚拟方法。
我有一个对象层次结构:
class Action {
public:
Action() { }
virtual void action() = 0;
}
class CubeAction : public Action {
public:
CubeAction() { }
void action() {
glutSolidCube(1);
}
};
而且我有一个用于存放基础对象的容器 class。
class ActionContainer {
private:
std::vector<Action *> actions;
public:
void add(Action &action) { actions.push_back(&action); }
void doActions() {
for (auto a : actions) {
a->action();
}
}
};
当我尝试 doActions
:
ActionContainter actions();
CubeAction cubeAction();
actions.add(cubeAction);
actions.doActions();
我收到 pure virtual method called
错误。
我用了Calling a virtual function on a vector of base classes的方案,还是报错
更新: 抱歉,这是我的真实代码:Github。我认为 Action.h
文件中存在一些错误。
您在 github 中的代码如下所示:
try {
SphereAction sphereAction(1);
actions.add(sphereAction);
CubeAction cubeAction(2);
actions.add(cubeAction);
} catch (InfoException e) {
cerr << e.what() << endl;
}
然后,您调用 display()
,它调用 ActionContainer::doActions()
。
在容器中,你存储了一个指向参数的指针,但是你传递了一个局部变量给actions.add()
,它会超出范围,使用时不再存在。