Я получаю странную ошибку с моим кодом слотов и сигналов в 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/
Почему я получаю неопределенные ссылки, подобные этим, с моими заголовками в моем пути включения?
Есть два решения этой проблемы, но ваша конкретная проблема может сводиться к одной и той же основной причине, которая заключается в том, чтобы поместить заголовочный файл в HEADERS
переменная. Сделав это, вам может потребоваться переиздание qmake
команда.
Исходя из вашего вопроса, не ясно, что он будет делать эту работу самостоятельно, так как мы не видели ни вашей системы сборки, ни исходного файла, но:
1) Сделайте так, чтобы система сборки позаботилась о проблеме. Это выглядит проще на первый взгляд.
2) Использование #include "foo.moc"
в конце исходного файла, чтобы избежать этого. Эта версия будет работать с любой системой сборки таким же образом после генерации файла moc.
Оказывается, ты иметь вручную указать все ваши заголовки со слотами в .pro
:
HEADERS += yourHeader.h
Qt должен использовать это для генерации файлов MOC (Meta Object Code).