2011-04-16 26 views
6

Saf sanal işlev çağrısı.Ben C++ ile yazılmış piton-modüllerini yapmak için boost.python kullanıyorum

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

Test obj 
obj.GetPosition() 

RuntimeError: Pure virtual function called

Sorun nedir: Ben koduna sahip Python

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

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

: Ben böyle ihraç var saf sanal fonksiyonları ile bazı temel sınıf var? Bir yapıcı veya yıkıcı bir doğrudan veya dolaylı olarak saf bir sanal üyesini çağırdığında

+1

Python kodu bir sözdizimi hatası içeriyor. – delnan

+1

C++ sınıfı 'getPosition' (küçük harf g) ve Python sınıfında' GetPosition' (büyük harf G) vardır. Python hakkında bir şey bilmiyorsun, ama belki bu önemli mi? – Xeo

+2

Neden 'getPosition()' sanal anahtar kelimeyi eksik? –

cevap

4

Bu hata olur.

(yapıcı ve yıkıcı yürütülmesi sırasında, dinamik tip inşa/tahrip tipidir ve bu yüzden, sanal üyeleri bu tür için çözümlenir unutmayın).

+0

Nasıl çözüldüğünü anlamıyorum? –

1

bir "sanal işlevi" temel sınıf hiçbir tanımı bir fonksiyonudur. Bu, bu temel sınıftaki tüm çocukların bu işlevin geçersiz kılındığı anlamına gelir, ancak temel sınıfın bir uygulaması yoktur. Eğer bildirilen bir işlev aradığınız böylece, saf bir sanal işlevi aradığınız gibi örnekte

, görünüşe, ancak herhangi bir çocuğun uygulanmasını çağırarak olmadığı için, hiç bir tanıma sahip. Eğer burada yayınlanan