2011-04-16 19 views
6

Estoy usando boost.python para hacer que los módulos de python se escriban en C++. Tengo alguna clase de base con funciones virtuales puras que he exportados como esto:Llamada de función virtual pura

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

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

en Python tengo código:

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

Test obj 
obj.GetPosition() 

RuntimeError: Pure virtual function called

¿Qué ocurre?

+1

El código de Python que publicó aquí contiene un error de sintaxis. – delnan

+1

La clase C++ tiene 'getPosition' (minúscula g) y la clase Python tiene' GetPosition' (mayúscula G). No sé nada sobre Python, pero tal vez eso importe? – Xeo

+2

¿Por qué 'getPosition()' no tiene la palabra clave virtual? –

Respuesta

4

Este error ocurre cuando un constructor o un destructor llama directa o indirectamente a un miembro virtual puro.

(Recuerde que durante la ejecución del constructor y del destructor, el tipo dinámico es el tipo construido/destruido y, por lo tanto, los miembros virtuales se resuelven para ese tipo).

+0

No entendí cómo se resolvió? No hay envoltorio –

1

Una "función virtual pura" es una función que no tiene definición en la clase base. Significa que todos los niños de esa clase base tendrán una implementación anulada de esa función, pero la clase base no tiene una implementación.

En su ejemplo, parece que está llamando a una función virtual pura, por lo que está llamando a una función que está declarada, pero como no está llamando a la implementación de ningún elemento secundario, no tiene definición.

Cuestiones relacionadas