2014-09-27 105 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的定义。