ожидаемый конструктор, деструктор или преобразование типа перед ';' токен (Q_DECLARE_METATYPE_CONTACT)

поэтому я определил класс с создателем Qt (С++ 11):

#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(Контакт);

Спасибо за вашу помощь и совет.


person Mangemouton    schedule 18.03.2016    source источник


Ответы (2)


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

person Craig Scott    schedule 19.03.2016

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

person BJovke    schedule 18.03.2016
comment
Я сделал это, но получаю эту ошибку: ожидаемый конструктор, деструктор или преобразование типа перед «Контактом» - person Mangemouton; 19.03.2016