我正在使用C++第三方庫,將其所有類放入版本化命名空間中,我們將其稱爲tplib_v44
。它們還定義了一個通用的命名空間別名:C++名稱空間別名和前向聲明
namespace tplib = tplib_v44;
如果向前聲明中使用通用命名空間我自己的.h文件庫中的一員......
namespace tplib { class SomeClassInTpLib; }
...我得到在第三方庫的頭編譯器錯誤(這是後來被包含在我的.cpp實現文件):
error C2386: 'tplib' : a symbol with this name already exists in the current scope
如果我使用特定版本的命名空間,那麼一切工作正常,但後來.. w帽子的重點?處理這個問題的最好方法是什麼?
[編輯]供未來觀衆參考,這是ICU圖書館。解決方案(至少在我的情況下)是在對接受答案的評論中。
這非常接近爲我工作的結果。事實證明,我的圖書館(ICU圖書館)有一個小頭(uversion.h),除其他外,它定義了名稱空間別名。如果我將這個頭文件包含在頭文件中,我可以使用他們在頭文件中定義的版本化命名空間宏(U_ICU_NAMESPACE),並在我的cpp文件中使用通用名稱空間。因此,我無需修改版本化的名稱空間,只需最小的編譯時間依賴性。 – 2010-06-14 13:38:10