2011-04-16 169 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

「純虛函數」是一個在基類中沒有定義的函數。這意味着該基類的所有子類都將具有該函數的重載實現,但基類沒有實現。

在你的例子中,它看起來像你正在調用一個純虛函數,所以你正在調用一個被聲明的函數,但是因爲你沒有調用任何子實現,所以沒有定義。