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

поэтому я определил класс с помощью Qt Creator (C ++ 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 (контакт);

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

2

Решение

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

3

Другие решения

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

0

По вопросам рекламы [email protected]