纯虚方法称为终止

时间:2016-05-25 10:23:46

标签: c++ pure-virtual

我正在尝试在C ++中使用虚拟方法。

我有一个对象层次结构:

select date '2016-05-25' - date '2016-01-02' as diff1,
  date '2016-05-25' - date '0016-05-25' as diff2,
  date '0016-05-25' - date '2016-01-02' as diff3,
  trunc(sysdate) - date '2016-01-02' as diff4
from dual;

     DIFF1      DIFF2      DIFF3      DIFF4
---------- ---------- ---------- ----------
       144     730487    -730343        144

我有一个容器用于基类的对象。

class Action {
public:
    Action() { }

    virtual void action() = 0;
}

class CubeAction : public Action {
public:
    CubeAction() { }

    void action() {
        glutSolidCube(1);
    }
};

当我尝试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(); 错误。

我使用了Calling a virtual function on a vector of base classes解决方案,但错误仍然发生。

UPD:抱歉,这是我的真实代码:Github。我认为pure virtual method called文件中有一些错误。

1 个答案:

答案 0 :(得分:1)

你在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(),这将超出范围,并且在使用时不再存在。