2011-03-31 113 views
1

(我解決這個問題涉及第三方的lib,我不能改變)如何在不衝突的情況下處理不同層級的名稱空間相同的名稱空間?

#include <list> 
//Third party lib namespace 
namespace foo 
{ 
    typedef int SomeType; 
} 


//my namespace 
namespace mycompany 
{ 
    namespace groo 
    { 
     typedef std::list<foo::SomeType> SomeTypeList; 
    } 

    namespace foo 
    { 
     typedef std::list<foo::SomeType> SomeTypeList; 
    } 
} 

int main() { return 0; } 

試圖編譯此產生錯誤:從groo作品就好

error: 'SomeType' is not a member of 'mycompany::foo' 

訪問。你如何從mycompany::foo訪問淺的foo

(我會回答這個自己,但想我會發布的情況下,別人的問題有相同)

回答

5

當編譯器是困惑範圍,你總是可以絕對地址命名空間。全球範圍::所以foo::SomeType的絕對範圍名稱是::foo::SomeType

我真的不知道爲什麼編譯器不會自動搜索較淺的命名空間,當它沒有找到在更深的一個符號,但..

0

::foo::SomeType應該這樣做。

相關問題