Ошибка "неразрешенный внешний символ.." при наследовании от Q_Object
Хотелось добавить в класс слоты и сигналы, попыталась наследоваться от QObject:
Service.h
#include <QObject>
class Service: public QObject
{
Q_OBJECT
public:
Service(QObject* parent = nullptr);
~Service()
//далее функции, не связанные с qt
}
Service.cpp
#include <Service.h>
Service::Service(QObject* parent):
QObject(parent)
{}
Service::~Service()
{}
//далее функции, не связанные с qt
И посыпались ошибки: LNK2001 неразрешенный внешний символ ""public: virtual void* __cdecl Service::qt_metacast(char const )" (?qt_metacast@Service@@UEAAPEAXPEBD@Z)" и еще 2 подобных (на virtual struct QMetaObject const и virtual int__cdecl Service::qt_metacall).
В других проектах также и все работает.Сборка проекта через cmakе, если нужно - скину файлы, но там вроде все подключено. Использовать QFile , QDir и прочее получается, собирается без проблем. В чем может быть проблема с q_object?
Ответы (1 шт):
Подобная ошибка возникает, если файлы, которые содержат макрос Q_OBJECT, не были обработаны moc (meta object compiler). Можно конечно ручками запустить, а можно просто добавить cmake знания о том, что нужно добавить его вызов. В большинстве случаев хватит такой строки
set(CMAKE_AUTOMOC ON)
Детали - в официальной документации.