Я получаю следующую ошибку компоновщика, когда я создаю свое приложение.
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 и статью как компилятор.
Какова могла бы быть причина позади этой ошибки компоновщика?
Такие ошибки обычно означают, что вы не добавили заголовок вашего класса в переменную "HEADERS" в файле pro (компилятор метаобъектов генерирует файлы moc_ только для заголовков, перечисленных в этой переменной). Не забудьте запустить qmake после изменения файла .pro!
Проверьте, что необходимые опции конфигурации Qt присутствуют в файле pro (QT += core gui
по крайней мере. Также попробуйте вручную удалить все собранное/созданное в каталоге сборки. Иногда случается, что moc
по какой-то причине не запускается.
Вы также можете попробовать запустить команду moc самостоятельно и посмотреть, что она выводит (вы можете найти командную строку на вкладке "Compile output" в QtCreator.
UPDATE: эта связанная проблема, похоже, предполагает, что вы не определяете QT_DLL при компиляции. Можете ли вы попробовать создать новый простой проект QtCreator (с виджетом, который является подклассом mainwindow, например) и попробовать его. Он должен автоматически содержать заголовок Q_OBJECT и попробуйте сравнить .pro файлы и вывод компилятора.
Проверьте файл MakeFile.debug
и, возможно, HIMyClass
не существует.
Я просто переименовываю MakeFile.debug
, очищаю проект и перестраиваю все, и он компилируется.