2016-01-30 2 views
0

Je suis nouveau en qt. J'ai l'héritage suivant:Classe dérivée Q_OBJECT, héritage

class Poster : public QObject 
{ 
    Q_OBJECT 
} 

class SyncPoster: public Poster 
{ 
    Q_OBJECT 

private slots: 
    ... some functions 

} 

class TextPoster : public Poster 
{ 

    Q_OBJECT 

private slots: 
    ... some functions 

} 

Mais assemblage lancers francs suivi erreur:

Undefined symbols for architecture x86_64: "vtable for SyncPoster", referenced from: SyncPoster::SyncPoster(Window*, QString const&, QString const&, QString const&, QString const&) in sync_poster.o NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. ld: symbol(s) not found for architecture x86_64

Qu'est-ce que cela signifie, et ce que je fais mal? Avez-vous des idées?

Répondre

0

De un sujet similaire Why am I getting "Undefined symbols ... typeinfo ... vtable" with a virtual and concrete class?:

...You seem to be confusing definition with declaration. What you have in the base class is only declaration without definition, i.e. implementation. You either need to make it pure virtual or implement it even if it is just an empty {}...

Vérifiez la déclaration et la définition de votre constructeur. Est-ce que votre SyncPoster classe a un constructeur public? A-t-il une définition? (Un corps?)

SyncPoster::SyncPoster(/*...*/) 

Vérifiez si elle a un corps:

SyncPoster::SyncPoster(/*...*/) {} 
           //^^^ body 
+0

J'ai toutes les classes pour avoir la macro Q_OBJECT dans le fichier d'en-tête. J'ai modifié la question – busylee

+0

Avez-vous répondu à cette question? http://stackoverflow.com/a/23306827/4149835 –

+0

Qu'est-ce que je pouvais comprendre à partir de cela? – busylee

0

Un cas courant de cette erreur est lorsque vous créez une classe dérivée de QObject et vous ajoutez ou supprimez la Q_OBJECT sans appeler qmake avant de construire. L'appel manquant à qmake ne déclenchera pas une nouvelle analyse du fichier et moc ne fonctionnera pas si vous venez d'ajouter Q_OBJECT.