2010-12-01 6 views
5

Je me demandais pourquoi je recevais cette erreur: undefined reference to` vtable pour BaseRenderer »C++ - référence non définie à `vtable

J'ai essayé de chercher semblent autour mais ne peut pas comprendre cela. J'ai essayé de se débarrasser de la fonction virtuelle, en supprimant le constructeur, etc.

Mon 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; 

}; 

Mon BaseRenderer.cpp

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

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

} 

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

Comment puis-je faire pour se débarrasser de ce problème? Je l'entends aussi peut-être le compilateur ...? Merci pour l'aide :)

+0

quels sont les paramètres transmis au compilateur? – sashang

+0

Qu'est-ce que Q_OBJECT? –

+0

@John - c'est une macro Qt, ce qui signifie que ce fichier source doit être exécuté via un outil Qt séparé ('moc.exe') pour générer un tas de code pour les comportements spécifiques à Qt comme les slots et les signaux. – birryree

Répondre

9

Puisque Q_OBJECT est dans la classe parente, Renderer, vous n'avez pas besoin de l'inclure également dans BaseRenderer. Il suffit de se débarrasser de Q_OBJECT et il devrait fonctionner :)

+0

Ça marche pour moi. pouvez-vous élaborer plus pourquoi supprimer Q_OBJECT résoudre cela? Je sous-classe chose de QWidget – swdev

1

Je pense que ce message très inutile se plaint vraiment vous ne pas fournir des définitions pour les autres fonctions de votre classe BaseRenderer, que votre fichier baseRenderer.cpp semble avoir seul le constructeur et Destructeurs.

1

Assurez-vous de mettre en œuvre toutes les méthodes déclarées, en particulier le logement. Vérifiez ensuite que votre en-tête est répertorié dans la section HEADERS du fichier .pro, puis exécutez qmake.

Questions connexes