2016-03-18 3 views
1

так я определил класс с Qt Creator (C++ 11):ожидаемый конструктор, деструктор или преобразование типов перед ';' Маркер (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 

Но я получаю эту ошибку: ожидаемый конструктор, деструктор, или тип преобразования перед ';' токен Q_DECLARE_METATYPE (контакт);

Благодарим за помощь и совет.

ответ

0

Удалить точку с запятой от конца Q_DECLARE_METATYPE(Contact);.

+0

Я сделал это, но я получил эту ошибку: ожидаемый конструктор, деструктор или преобразование типов перед «контактом» – Mangemouton

1

Вам нужно #include <QMetaType>, потому что это то, что определяет макрос Q_DECLARE_METATYPE. Даже если вы это сделаете, класс Contact не может быть использован как это, потому что он имеет хотя бы одну чистую виртуальную функцию (getnom()). Это не совсем ясно из Qt's documentation, но класс должен быть реалистичным, если вы хотите объявить его как мета-тип, и если класс имеет чистую виртуальную функцию, он не реален.

Смежные вопросы

 Смежные вопросы