2010-04-21 115 views
2

編譯項目時出現這個非常奇怪的問題。 MOC似乎正在爲正在被moc化的類名稱添加一個名稱空間,儘管它在文件/類中的任何地方都沒有提及。MOC將名稱空間添加到類名稱

但是,名稱空間存在於我使用的庫中,但它隱藏在頭文件中很遠的位置,我不在UI文件中使用它。這是MOC生成:

const QMetaObject SmpTl::CaptureController::staticMetaObject = { 
{ &QObject::staticMetaObject, qt_meta_stringdata_SmpTl__CaptureController, 
    qt_meta_data_SmpTl__CaptureController, 0 }}; 

的SmpTl命名空間不CaptureController聲明提及任何地方,但它出現在MOC生成的.cpp文件。

我正在使用Visual Studio與QT集成。

回答

0

SmpTl是命名空間CaptureController被定義在中,因爲它是由MOC發現的。

Q_OBJECT宏擴展到您的類定義內部的staticMetaObject變量的聲明中(其中包括擴展)。 MOC文件包含該變量的定義。

如果這不正確,請發佈您的Qt版本和精簡版頭文件。

+1

我發現這個問題,它在include列表中很遠的某個頭文件的asm代碼中缺少'''代碼#ifdef'ed只用於MIPS架構,所以編譯器沒有抱怨失蹤「,但不知何故,MOC感到困惑。 – Florin 2010-04-22 09:47:02

1

我也遇到了這個問題。我看起來像這樣的代碼:

namespace foo { 
    #ifdef _WIN32 
    ... // This code was fine 
    #else 
    #error Not Supported 
    #endif 
} 

這混淆了MOC成想法命名空間foo從未關閉。顯然它不知道_WIN32被定義,並且因爲我忘記在錯誤消息中引用引號而被絆倒了。將其更改爲

#error "Not Supported" 

解決了我的問題。

+1

跨越完全相同的問題,謝謝!如果#error行包含單引號'''字符,我必須添加它。刪除'''或用雙引號括住錯誤字符串'''解決了我的問題。 – Hossein 2014-04-16 14:25:50

相關問題