2011-09-03 76 views
0

我似乎有一個奇怪的問題:預期不合格的ID「;」令牌

我在C語言編寫的應用程序++(使用Eclipse CDT)使用Mozilla的Netword安全服務。這個應用程序運行良好,所以我認爲我可以將適當的類/標題/源移動到另一個項目(這通常可以完成?)。原始項目使用位於/usr/include/nsprlibnss3的一些額外的標頭。

這個其他項目是使用CMake編譯的。所以我告訴CMake將/usr/include/nspr添加到包含路徑中並使用libnss3。然而,當我嘗試使用另一個項目中的類,我在編譯時出現以下錯誤:

In file included from some-dir/src/import/FirefoxImporter.h:21:0, 
       from some-dir/src/import/Import_Firefox.h:26, 
       from some-dir/src/mainwindow.cpp:28: 
/usr/include/nss/secmodt.h:85:25: error: expected unqualified-id before ‘;’ token 

85號線在secmodt.h如下所示:

PK11SlotInfo **slots; /* array of slot points attached to this mod*/ 

而且PK11SlotInfo中typedef定義secmodt.h

typedef struct PK11SlotInfoStr PK11SlotInfo; /* defined in secmodti.h */ 

但是,我沒能在我的系統上找到secmodti.h(但是,原來編程的, m編譯並執行得很好)。

有沒有人遇到過類似的問題並解決了它們?

回答

5

我懷疑你在secmodt.h之前包含了QT。 'slots'是一個QT moc關鍵字。

更新

我猜這是因爲QT是一個流行的庫(我知道的slots其使用的)。此外,這種類型的錯誤看起來像典型的預處理器廢話。

QT的#define d'slots'沒有用於其元對象編譯器。

您可以:(?可能)包括在某些時候QT後secmodt.h(可能?)add no_keywords to your config - 然後祈求神靈的編譯器。

+0

這是正確的。你能解釋爲什麼你猜這個?爲什麼QT搞亂我的東西? – phimuemue

+1

我很討厭Qt的定義... –

+0

那麼有沒有一種方便的方法來解決這個歧義? – phimuemue