1

Хотелось добавить в класс слоты и сигналы, попыталась наследоваться от 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?

8Irbis8
  • 96
  • а при компиляции этот файл обрабатывается moc? – KoVadim Aug 05 '20 at 12:44
  • прошу прощения за тупой вопрос, но как это в visual studio проверить? – 8Irbis8 Aug 05 '20 at 13:01
  • 2
    подозреваю, что строки "set(CMAKE_AUTOMOC ON)" хватит (https://doc.qt.io/qt-5/cmake-get-started.html) – KoVadim Aug 05 '20 at 13:03

1 Answers1

4

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

set(CMAKE_AUTOMOC ON)

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

KoVadim
  • 112,121
  • 6
  • 94
  • 160