Qt 4.8: неопределенная ссылка на vtable с использованием слотов и сигналов

Я получаю странную ошибку с моим кодом слотов и сигналов в Qt v4.8.5. Всякий раз, когда я включаю мой QObject со слотами:

class dnEventHandler : public QObject
{
Q_OBJECT
public slots:
void LaunchProjectCreator();
};

Я получаю некоторые странные ошибки:

Main.cc:(.text.startup+0x4b): undefined reference to `vtable for dnEventHandler'
Main.cc:(.text.startup+0x19e): undefined reference to `vtable for dnEventHandler'
Main.cc:(.text.startup+0x20d): undefined reference to `vtable for dnEventHandler'

Я думал, что это было довольно странно, так как казалось, что ошибка как-то связана с заголовками в .pro, но у меня уже были заголовки в пути включения в .pro вот так:

INCLUDEPATH += ../../include/

Почему я получаю неопределенные ссылки, подобные этим, с моими заголовками в моем пути включения?

-1

Решение

Есть два решения этой проблемы, но ваша конкретная проблема может сводиться к одной и той же основной причине, которая заключается в том, чтобы поместить заголовочный файл в HEADERS переменная. Сделав это, вам может потребоваться переиздание qmake команда.

Исходя из вашего вопроса, не ясно, что он будет делать эту работу самостоятельно, так как мы не видели ни вашей системы сборки, ни исходного файла, но:

1) Сделайте так, чтобы система сборки позаботилась о проблеме. Это выглядит проще на первый взгляд.

2) Использование #include "foo.moc" в конце исходного файла, чтобы избежать этого. Эта версия будет работать с любой системой сборки таким же образом после генерации файла moc.

1

Другие решения

Оказывается, ты иметь вручную указать все ваши заголовки со слотами в .pro:

HEADERS += yourHeader.h

Qt должен использовать это для генерации файлов MOC (Meta Object Code).

0

По вопросам рекламы [email protected]