2011-04-16 126 views
6

我正在使用boost.python来编写用C++编写的python模块。我有我已经远销这样的纯虚函数的一些基本类:纯虚拟函数调用

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

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

我有代码:

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

Test obj 
obj.GetPosition() 

RuntimeError: Pure virtual function called

有什么不对?

+1

您在此发布的Python代码包含语法错误。 – delnan 2011-04-16 17:32:34

+1

C++类具有'getPosition'(小写字母g),Python类具有'GetPosition'(大写字母G)。不了解Python的任何内容,但也许这很重要? – Xeo 2011-04-16 17:34:38

+2

为什么'getPosition()'缺少virtual关键字? – 2011-04-16 17:35:18

回答

4

当构造函数或析构函数直接或间接调用纯虚拟成员时,会发生此错误。 (请记住,在构造函数和析构函数执行过程中,动态类型是构造/析构类型,因此为该类型解析虚拟成员)。

+0

我不明白它是如何解决的?没有包装 – 2016-03-17 13:45:32

1

“纯虚函数”是一个在基类中没有定义的函数。这意味着该基类的所有子类都将具有该函数的重载实现,但基类没有实现。

在你的例子中,它看起来像你正在调用一个纯虚函数,所以你正在调用一个被声明的函数,但是因为你没有调用任何子实现,所以没有定义。