Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在嵌套名称说明符中使用枚举(编译器警告)_C++_Enums - Fatal编程技术网

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-你是对的,这只是使用不同名称的另一个原因。