2016-03-18 5 views
1

so die Klasse mit Qt Creator (C++ 11) Ich habe definiert:erwarteter Konstruktor, Destruktor oder Typkonvertierung vor ';' Token (Q_DECLARE_METATYPE_CONTACT)

#ifndef CONTACT_H 
#define CONTACT_H 

#include <QStringList> 
#include <list> 

class Contact 
{ 
public : 
    Contact(); 
    ~Contact(); // destructeur 

    Contact(const Contact & contact); // constructeur de copie 
    Contact& operator=(const Contact& c); //opérateur de copie 

    Contact(Contact && c); // constructeur de déplacement 
    Contact& operator=(Contact&& c); // opérateur de déplacement 

    QString obtAdresse() const; 
    void changeAdresse(QString adresse); 

    QString obtFacebook() const; 
    void changeFacebook(QString facebook); 


    QString obtTwitter() const; 
    void changeTwitter(QString twitter); 

    QString obtNote() const; 
    void changeNote(QString note); 

    virtual QString getnom() = 0; 

    void reinitialise(); 

protected : 
    QString adresse; 
    QString facebook; 
    QString twitter; 
    QString note; 

}; 

Q_DECLARE_METATYPE(Contact); 

#endif // CONTACT_H 

Aber ich bekomme diese Fehlermeldung: erwartet Konstruktor, Destruktor oder Typumwandlung vor ';' Token Q_DECLARE_METATYPE (Kontakt);

Vielen Dank für Ihre Hilfe und Beratung.

Antwort

0

Entfernen Sie das Semikolon vom Ende Q_DECLARE_METATYPE(Contact);.

+0

Ich habe dies getan, aber ich bekomme diesen Fehler, erwartete Konstruktor, Destruktor oder Typ Konvertierung vor 'Kontakt' – Mangemouton

1

Sie müssen #include <QMetaType>, denn das ist, was das Q_DECLARE_METATYPE Makro definiert. Selbst wenn Sie das tun, kann die Klasse Contact nicht so verwendet werden, weil sie mindestens eine reine virtuelle Funktion hat (getnom()). Es ist nicht genau klar von Qt's documentation, aber die Klasse muss instanziierbar sein, wenn Sie es als Meta-Typ deklarieren wollen und wenn die Klasse eine reine virtuelle Funktion hat, ist sie nicht instanziierbar.