2010-12-01 15 views
5

Me preguntaba por qué estaba consiguiendo este error: referencia indefinida a` vtable para BaseRenderer'C++ - Referencia Indefinido a `vtable

He intentado buscar por ahí, pero parece que no puede resolver esto. He intentado deshacerse de la función virtual, eliminando el constructor, etc.

Mi BaseRenderer.h

class BaseRenderer : public Renderer 
{ 
Q_OBJECT 

    public: 
     BaseRenderer(); 
     BaseRenderer(QWidget *parent); 
     void paintGL(); 

     virtual ~BaseRenderer(); 

public slots: 
    void loadDialog(); 

signals: 

    protected: 
     Mesh loadMesh(string fileName); 

    private: 

     OBJParser objParser; 
     Mesh baseTerrain; 

}; 

Mi BaseRenderer.cpp

BaseRenderer::BaseRenderer()    <------ Error leads me here 
{ 
} 

BaseRenderer::BaseRenderer(QWidget *parent) : Renderer(parent) 
{ 

} 

BaseRenderer::~BaseRenderer() 
{ 
    //dtor 
} 

¿Cómo iría acerca de deshacerse de este problema? También escuché que puede ser el compilador ...? Gracias por la ayuda :)

+0

¿Cuáles son los parámetros pasados ​​al compilador? – sashang

+0

¿Qué es Q_OBJECT? –

+0

@John: es una macro Qt, lo que significa que este archivo fuente se debe ejecutar a través de una herramienta Qt separada ('moc.exe') para generar un grupo de códigos para comportamientos específicos de Qt, como ranuras y señales. – birryree

Respuesta

9

Como Q_OBJECT está en la clase principal, Renderer, no es necesario que también lo incluya BaseRenderer. Sólo deshacerse de Q_OBJECT y debería funcionar :)

+0

Funciona para mí. ¿Puedes elaborar más por qué eliminar Q_OBJECT resuelve esto? Yo subclass cosa de QWidget – swdev

1

creo que este mensaje muy poco útil es realmente quejaba de que no proporciona definiciones para las otras funciones en su clase BaseRenderer, que el archivo baseRenderer.cpp parece tener sólo el constructor y los destructores.

1

Asegúrese de implementar todos los métodos declarados, especialmente la ranura. Luego, verifique que su encabezado aparezca en la sección HEADERS en el archivo .pro y luego ejecute qmake.

Cuestiones relacionadas