поэтому я определил класс с помощью 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 (контакт);
Спасибо за вашу помощь и совет.
Вам нужно #include <QMetaType>
потому что это то, что определяет Q_DECLARE_METATYPE
макро. Даже если вы сделаете это, Contact
класс не может использоваться таким образом, потому что он имеет хотя бы одну чисто виртуальную функцию (getnom()
). Это не совсем понятно из Документация Qt, но класс должен быть инстанцируемым, если вы хотите объявить его как метатип и если у класса есть чисто виртуальная функция, он не является инстанцируемым.
Удалить точку с запятой в конце Q_DECLARE_METATYPE(Contact);
,