怀疑解决枚举中的名称空间?

问题描述

| 从下面的问题中,我有点得到枚举和命名空间作用域的工作方式 范围解析运算符是否枚举特定于编译器的扩展? 但是,关于下面的测试代码,我对下面的代码片段中的原因感到困惑: 1)我可以将函数签名中的返回类型称为test_enum :: foo_enum 2)但是不允许“使用名称空间test_enum :: foo_enum \”
namespace  test_enum { 

   enum foo_enum { 

      INVALID,VALID
    };
} 

// Case 1) this is allowed 
test_enum::foo_enum getvalue() {

     return test_enum::INVALID;

}

//Case 2) is not allowed 

using namespace test_enum::foo_enum; 
是否有特定的原因不允许案例2? 还有“枚举”更多地是C样式构造的,并且在C ++代码中更好地避免使用吗?     

解决方法

不允许使用“ 1”的原因是因为“ 2”不是名称空间,它是一个枚举。什么是ѭ3works 我相信您正在尝试做的事情是这样的:
namespace foo_enum {
    enum foo_enum_t {
        INVALID,VALID,};
}

using foo_enum::foo_enum_t;
这使您可以随意扔出
foo_enum_t
,但仍然必须输入
foo_enum::INVALID
foo_enum::VALID