问题描述
|
从下面的问题中,我有点得到枚举和命名空间作用域的工作方式
范围解析运算符是否枚举特定于编译器的扩展?
但是,关于下面的测试代码,我对下面的代码片段中的原因感到困惑:
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