Pure virtual function call

2019-04-28 23:38发布

I'm using boost.python to make python-modules written in c++. I have some base class with pure virtual functions which I have exported like this:

class Base
{
    virtual int getPosition() = 0;
};

boost::python::class_<Base>("Base")
   .def("GetPosition", boost::python::pure_virtual(&Base::getPosition));

in Python I have code:

class Test(Base):
   def GetPosition(self):
      return 404

Test obj
obj.GetPosition()

RuntimeError: Pure virtual function called

What's wrong?

2条回答
Rolldiameter
2楼-- · 2019-04-28 23:46

A "pure virtual function" is a function that has no definition in the base class. It means that all children of that base class will have an overridden implementation of that function, but the base class does not have an implementation.

In your example, it looks like you are calling a pure virtual function, so you are calling a function that is declared, but since you are not calling any child's implementation, it has no definition.

查看更多
霸刀☆藐视天下
3楼-- · 2019-04-28 23:49

This error happens when a constructor or a destructor directly or indirectly calls a pure virtual member.

(Remember that during constructor and destructor execution, the dynamic type is the constructed/destructed type and so virtual members are resolved for that type).

查看更多
登录 后发表回答