初始化枚举c ++

时间:2014-09-14 08:51:34

标签: c++ enums

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

enum  Types {Int,Double,String};  

当我创建一个对象并使用其中一个允许的枚举值进行初始化时,我收到以下错误:“错误:不允许输入类型名称”。

Types ty = Types.Double;  

有什么想法吗?

3 个答案:

答案 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;