2014-09-27 63 views
0

我正在寫有內容的庫:C++:是否當前命名空間覆蓋其他命名空間

namespace david { 
    typedef enum { 
    BAR 
    } CommonEnum; 

    class Foo { 
    void fooBar() { 
     std::cout << BAR << std::endl; 
    } 
    } 
} 

,並假設用戶寫文件

typedef enum { 
    BAR = 1 
} CommonEnum; 

#include <david.h> 

Foo myFoo(); 

myFoo.fooBar(); 

什麼將被打印出來?如果0將被打印,是可靠?我知道我可以在david::Foo前加上BAR的前綴,使其成爲david::BAR,這就可以肯定地回答這個問題(這是我現在正在做的),但它變得非常冗長,我試圖堅持80這意味着我的代碼越來越難以閱讀。

+0

*「會打印什麼?」* - 回答問題:嘗試此操作時打印了什麼?這是唯一的問題,還是你在尋找標準中的引用來消除你所懷疑的所有疑問,即你所見證的是明確的? – WhozCraig 2014-09-27 02:55:15

+0

它首先會抱怨'Foo'定義中缺少分號,然後它會告訴你''Foo'沒有在這個範圍內聲明「,然後,當你解決這個問題時,」請求成員'fooBar'在' myFoo',它是非類類型的'david :: Foo()'「,最後它會抱怨'fooBar'是私有的。 – 2014-09-27 04:07:17

回答

0

具有類Foo和枚舉BARnamespace david

void fooBar() { 
    std::cout << BAR << std::endl; 
} 

將解決BAR到最裏面的適用範圍。因此

typedef enum { 
    BAR = 1 
} CommonEnum; 

不會「覆蓋」namespace david的定義。