Ошибка компоновщика Q_OBJECT!

Я получаю следующую ошибку компоновщика, когда я создаю свое приложение.

HIMyClass.obj:: ошибка: неразрешенная внешняя ссылка "общественность: виртуальная структура константа QMetaObject * __ thiscall CHIMyClass:: метаобъект (пустая) константа" (? metaObject@CHIMyClass @@ UBEPBUQMetaObject @@ XZ) Файл, не найденный: HIMyClass.obj

HIMyClass.obj:: ошибка: неразрешенная внешняя ссылка "общественность: виртуальная пустота * __ thiscall CHIMyClass:: qt_metacast (символьная константа *)" (? qt_metacast@CHIMyClass @@ UAEPAXPBD@Z) Файл, не найденный: HIMyClass.obj

HIMyClass.obj:: ошибка: неразрешенная внешняя ссылка "общественность: виртуальный интервал __ thiscall CHIMyClass:: qt_metacall (перечислимый QMetaObject:: Вызов, интервал, освобождает * *)" (? qt_metacall@CHIMyClass @@ UAEHW4Call@QMetaObject @@ HPAPAX@Z) Файл, не найденный: HIMyClass.obj

Мое объявление класса похоже

class CHIMyClass:public QDialog
{
   Q_OBJECT

   ....

};

Когда я комментирую Q_OBJECT, ошибка компоновщика уходит (и очевидно я не могу использовать сигналы и слоты). Я использую спокойного Создателя в качестве IDE и QT 4.5.3. Когда я даю, Восстанавливают Все, что определенно, что QMake назовут. Я предполагаю, что, это - поколение moc_* файлов, то, где проблема заключается. Я использую Windows XP и статью как компилятор.

Какова могла бы быть причина позади этой ошибки компоновщика?

12
задан liaK 16 July 2010 в 11:33
поделиться

3 ответа

Такие ошибки обычно означают, что вы не добавили заголовок вашего класса в переменную "HEADERS" в файле pro (компилятор метаобъектов генерирует файлы moc_ только для заголовков, перечисленных в этой переменной). Не забудьте запустить qmake после изменения файла .pro!

28
ответ дан 2 December 2019 в 03:25
поделиться

Проверьте, что необходимые опции конфигурации Qt присутствуют в файле pro (QT += core gui по крайней мере. Также попробуйте вручную удалить все собранное/созданное в каталоге сборки. Иногда случается, что moc по какой-то причине не запускается.

Вы также можете попробовать запустить команду moc самостоятельно и посмотреть, что она выводит (вы можете найти командную строку на вкладке "Compile output" в QtCreator.

UPDATE: эта связанная проблема, похоже, предполагает, что вы не определяете QT_DLL при компиляции. Можете ли вы попробовать создать новый простой проект QtCreator (с виджетом, который является подклассом mainwindow, например) и попробовать его. Он должен автоматически содержать заголовок Q_OBJECT и попробуйте сравнить .pro файлы и вывод компилятора.

0
ответ дан 2 December 2019 в 03:25
поделиться

Проверьте файл MakeFile.debug и, возможно, HIMyClass не существует.

Я просто переименовываю MakeFile.debug , очищаю проект и перестраиваю все, и он компилируется.

1
ответ дан 2 December 2019 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: