2016-02-05 61 views
0

我在标题中有一个enum匿名命名空间无法访问头

namespace somespace 
{ 
    namespace internal 
    { 

     class SomeClass 
     { 
      public: 

       typedef enum 
       { 
        kNone = 0, 
        kKaka = 1, 
       }SomeEnum; 
     } 
    } 
} 

在CPP,我们有时会使用匿名命名空间的辅助功能。

​​

但我不能在.cpp文件访问SomeEnum。这是为什么? 我怎样才能解决这个问题而不污染internal命名空间?

+3

你的'typedef枚举'定义是一个C-主义。在C++中,你可以简单地写'enum SomeEnum {kNone = 0,kKaka = 1};'。由于C++ 11,'enum类SomeEnum {kNone = 0,kKaka = 1};'也是首选。 –

+1

这段代码也看不到'SomeClass'。显然这里没有显示相关的东西。 –

+1

顺便提一下,枚举类型中第一个枚举数的默认值为0,其他任何枚举数的默认值都比其前面的枚举数的值多一个。因此上面的'SomeEnum'定义中的'= 0'和'= 1'是多余的。在某些情况下,定义具有特定值的枚举数是合适的;在许多情况下,这些值并不重要,默认值工作得很好。 –

回答

8

SomeEnum的作用域是它声明的类名称。要使用它,您需要使用SomeClass::SomeEnum。这里假定SomeClass可以在你有的范围内访问。如果没有,那么你需要somespace::internal::SomeClass::SomeEnum