В общем даже незнаю это баг или я чего-то не понимаю,
пишу почтовый клиент:
есть класс
C++ (Qt)
class SmtpAuthData
{
....
};
это класс обычных данных, которые нужны для авторизации,
сам класс который занимается приемом\передачей запросов серверу почты
наследуется от этого класса и QObject:
C++ (Qt)
class Letter : public QObject, private SmtpAuthData
{
SmtpAuthData smtpData;
const QString helloSmtp;
// internet connection
QTcpSocket tcpSocket;
quint16 blockSize;
Q_OBJECT
...
private slots:
void error_happens(QAbstractSocket::SocketError socketError);
void stateBecomeChange(QAbstractSocket::SocketState state);
...
из-за того что есть слот
C++ (Qt)
void stateBecomeChange(QAbstractSocket::SocketState state);
,
который реагирует на сигнал
C++ (Qt)
stateChanged(QAbstractSocket::SocketState )
в конце хедера пришлось добавить Q_DECLARE_METATYPE(QAbstractSocket::SocketState);
Все хорошо, но если поменять местами классы в записи наследования, например
C++ (Qt)
class Letter : private SmtpAuthData, public QObject
то компоновщик начнет сыпать ошибками:
debug\moc_Letter.cpp:53:8: error: 'staticMetaObject' is not a member of 'SmtpAuthData'
debug\moc_Letter.cpp: In member function 'virtual void* Letter::qt_metacast(const char*)':
debug\moc_Letter.cpp:73:12: error: 'qt_metacast' is not a member of 'SmtpAuthData'
debug\moc_Letter.cpp: In member function 'virtual int Letter::qt_metacall(QMetaObject::Call, int, void**)':
debug\moc_Letter.cpp:78:11: error: 'qt_metacall' is not a member of 'SmtpAuthData'
Это баг или это какая-то специфика наследования, в чем разница чередования в списке наследования?