[英]Undefined reference to MasterController::StaticMetaObject
[英]undefined reference to staticMetaObject
看起來Qt沒有正確處理Q_GADGET宏,因為我收到下面的錯誤。 誰知道為什么?
錯誤: 對'Exception :: staticMetaObject'的未定義引用
編輯:后來我發現MOC沒有生成moc_exception.cpp。 有時,當我切換編譯器工具包時,它編譯得很好但是如果我添加另一個繼承Exception的類,它再次不起作用。 問題需要在MOC的哪個地方忽略某些條件下的Q_GADGET宏?
我有Qt 5.5.0。
project.pro
CONFIG += c++11
QT += core
QT -= gui
SOURCES += \
main.cpp
HEADERS += \
nobject.h \
exception.h
nobject.h
#ifndef NOBJECT_H
#define NOBJECT_H
#include <QObject>
class NObject
{
Q_GADGET
public:
NObject() {}
virtual ~NObject() {}
};
#endif // NOBJECT_H
exception.h
#ifndef EXCEPTION_H
#define EXCEPTION_H
#include "nobject.h"
class Exception : public NObject
{
Q_GADGET
public:
Exception() {}
virtual ~Exception() {}
};
#endif // EXCEPTION_H
main.cpp中
#include <iostream>
#include "exception.h"
using namespace std;
int main(int argc, char* argv[]) {
Exception nobject;
std::cout << Exception::staticMetaObject.className() << std::endl;
return 0;
}
我懷疑運行qmake可能會解決您的問題。 每次添加或刪除Q_GADGET或Q_OBJECT宏時,請記住重新運行qmake,以使moc工具重新生成元數據的代碼。
通過查看我在代碼中沒有發現任何問題,因此我將代碼復制粘貼到我的機器上並構建並運行它。 在我為NObject構造函數添加實現后,它構建好了。 我在Qt5和Qt4上構建並成功運行它,程序在控制台上打印出Exception 。
Qt 5:
> ~/temp/qgadgettest$ qmake --version
QMake version 3.0
Using Qt version 5.2.1 in /usr/lib/i386-linux-gnu
> /temp/qgadgettest$ ./qgadgettest
Exception
Qt 4:
> ~/temp/qgadgettest$ qmake-qt4 --version
QMake version 2.01a
Using Qt version 4.8.6 in /usr/lib/i386-linux-gnu
> ~/temp/qgadgettest$ ./qgadgettest
Exception
在我的環境中,此代碼是正確的。 但是我已經添加了構造函數NObject的主體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.