Ошибка "неразрешенный внешний символ.." при наследовании от 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 шт):

Автор решения: KoVadim

Подобная ошибка возникает, если файлы, которые содержат макрос Q_OBJECT, не были обработаны moc (meta object compiler). Можно конечно ручками запустить, а можно просто добавить cmake знания о том, что нужно добавить его вызов. В большинстве случаев хватит такой строки

set(CMAKE_AUTOMOC ON)

Детали - в официальной документации.

→ Ссылка