2011-07-25 73 views
2

我將代碼從Windows機器移植到Mac。我使用OS X 10.6和Xcode 3.2.5命名空間覆蓋#include頭文件問題

我有稱爲一個頭文件api.h其具有以下的代碼:

namespace ocip { 
    #include "onan/ocip/ocip.h" 
} 

ocip.h包括的#include stdint.h
,其具有下面的typedef:

typedef unsigned int   uint32_t; 

現在回到api.h我有課,在它下面:

ocip :: uint32_t的m_nMode;

編譯器告訴我名字空間'ocip'中的uint32_t沒有命名一個類型。

任何想法我做錯了什麼?

回答

0

我不知道這是否會有所幫助,但可能已經聲明瞭一種「uint32_t」。如果包含「stdint」,則已經有一個同名的typedef。這可能會導致在opic.h中重新定義它的問題。

+0

我剛剛意識到我在我的問題中遺漏了那個關鍵詞,ocip.h包含了stdint.h,我希望ocip :: uint32_t會是。這是否意味着如果我包含stdint.h,我不能像使用這個問題一樣在其周圍使用命名空間? –

+0

stdint中的所有內容都位於標準名稱空間中。嘗試「ocip :: std :: uint32_t」,但我認爲你可能必須將#include移到名稱空間聲明之外(在它之前),然後執行「using namespace std」 – Chris

+0

它看起來不像uint32_t isn' t,因爲std :: uint32_t不能在有或沒有ocip ::的前面工作,或者包含使用名稱空間std;當我查看stdint.h時,它也沒有名稱空間。它仍然像ocip :: uint32_t應該工作,但它不 –