纯虚函数调用

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()

运行时错误:调用了纯虚函数。
有什么问题?

1
你在这里发布的Python代码包含语法错误。 - user395760
1
C++类有getPosition(小写g),而Python类有GetPosition(大写G)。不知道Python的情况,但也许这很重要? - Xeo
2
为什么getPosition()缺少虚拟关键字? - Karl von Moor
@xeo 不是的,@karl-von-moor 只是打错了。实际代码要复杂得多,所以我只发布了一些伪代码。 - Max Frai
哦,好的。:) 在评论中使用@名称的双重通知不起作用。:( - Xeo
2个回答

4

当构造函数或者析构函数直接或间接调用一个纯虚成员函数时,就会出现这个错误。

(请记住,在构造函数和析构函数执行期间,动态类型是正在构建/销毁的类型,因此虚成员将为该类型解析。)


我不明白它是如何解决的?没有包装器。 - Neel Basu

1

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

在您的示例中,看起来您正在调用一个纯虚函数,因此您正在调用一个已声明但由于您没有调用任何子类的实现而没有定义的函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接