C++ 在嵌套名称说明符中使用枚举(编译器警告)
我有一个枚举:C++ 在嵌套名称说明符中使用枚举(编译器警告),c++,enums,C++,Enums,我有一个枚举: enum eOperandType { Int8, Int16, Int32, Float, Double }; 和“Double”类的成员函数 eOperandType Double::getType(void) const { return (eOperandType::Double); } 它给了我一个关于在嵌套名称说明符中使用枚举的编译器警告 我还将返回行切换为:return(Double)但它只是给了我一
enum eOperandType
{
Int8,
Int16,
Int32,
Float,
Double
};
和“Double”类的成员函数
eOperandType Double::getType(void) const
{
return (eOperandType::Double);
}
它给了我一个关于在嵌套名称说明符中使用枚举的编译器警告
我还将返回行切换为:return(Double)代码>但它只是给了我一个关于预期表达式的错误
我如何解决这个问题
编辑:将行更改为return(::Double)代码>已修复警告和错误。有人能解释一下为什么会修复它吗?如果您想使用作用域枚举,您需要创建枚举:
enum struct eOperandType
(或“枚举类”)在C++11之前,不允许将枚举数称为enum name::enumerator
。因此,如果您使用的是旧编译器或未启用C++11模式,则eOperandType::Double
无效。如果您使用的是gcc或clang,请将-std=c++11
标志传递给编译器
如果这不是一个选项,那么更改return(Double)代码>到返回::双精度
或返回(::Double)代码>如果你喜欢不必要的括号。如果没有::
,Double
表示封闭类的名称。通过添加范围解析运算符,您告诉编译器您在全局命名空间中引用的是Double
,即枚举数
第三个选项是不要给类赋予与枚举数相同的名称。@Justin空格和新行也可能是不必要的@Zingam是的,但是返回(…)
在某些情况下很容易导致错误。因此,我主张最好完全避免。而且它是完全不需要的,即使是为了可读性,您可能想要检查您的类和枚举值都被称为Double
,请注意,“将行更改为return(::Double);
”并不能真正修复您的代码:您应该使用枚举类、作用域枚举或更好的枚举,更改名称。我不认为将行更改为return(::Double)代码>“这就足够了:,但OP可以使用命名空间限制枚举的范围:@Bob_uuu。示例中的错误与return语句无关,它位于main
中a
的声明中。由于代码对类和枚举数使用相同的名称,因此必须使用,类双a代码>-你是对的,这只是使用不同名称的另一个原因。