称为终止的纯虚方法

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(),它会超出范围,使用时不再存在。