我创建了一个名为Types
的枚举:
enum Types {Int,Double,String};
当我创建一个对象并使用其中一个允许的枚举值进行初始化时,我收到以下错误:“错误:不允许输入类型名称”。
Types ty = Types.Double;
有什么想法吗?
答案 0 :(得分:12)
在C ++中,有两种不同类型的枚举 - 范围和未范围的枚举(前者是随C ++ 11引入的)。对于未作用域的名称,枚举器的名称将直接引入封闭范围。
N3337§7.2/ 10
每个枚举名称和每个未编入的枚举器都在 立即包含枚举说明符的作用域。每个范围 枚举器在枚举范围内声明。这些名称遵守为(3.3)和(3.4)中的所有名称定义的范围规则。
您的枚举是无范围的,因此只需编写
即可Types ty = Double;
对于作用域枚举,顾名思义,枚举数在枚举范围内声明,并且必须使用枚举名限定:
enum class ScopedTypes {Int,Double,String};
enum UnscopedTypes {Int,Double,String};
ScopedTypes a = ScopedTypes::Double;
//ScopedTypes b = Double; // error
UnscopedTypes c = UnscopedTypes::Double;
UnscopedTypes d = Double;
答案 1 :(得分:6)
使用
Types ty = Double;
或
enum class Types {Int,Double,String};
Types ty = Types::Double;
答案 2 :(得分:3)
编译器抱怨尝试对值Double
进行限定,这是Java的方法。
只做
Types ty = Double;