初始化枚举c++

Initialize enum c++

本文关键字:c++ 枚举 初始化      更新时间:2023-10-16

我创建了一个名为Types:的枚举

enum  Types {Int,Double,String};  

当我创建一个对象并用枚举允许的值之一初始化它时,我会得到以下错误:"错误:类型名称不允许"。

Types ty = Types.Double;  

有什么想法吗?

在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;

使用

Types ty = Double;  

enum  class Types {Int,Double,String};  
Types ty = Types::Double;  

编译器抱怨试图限定值Double,这是Java的方法。

只做

Types ty = Double;