初始化枚举c ++

use*_*438 7 c++ enums

我创建了一个名为Types:

enum  Types {Int,Double,String};  
Run Code Online (Sandbox Code Playgroud)

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

Types ty = Types.Double;  
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Col*_*mbo 12

在C++中,有两种不同类型的枚举 - 作用域和未作用域(前者随C++ 11引入).对于未作用域的枚举器,名称直接引入封闭范围.

N3337§7.2/ 10

每个枚举名称和每个未作用域的枚举器都在包含枚举说明符的作用域中声明.每个作用域 枚举器都在枚举范围内声明.这些名称遵守为(3.3)和(3.4)中的所有名称定义的范围规则.

您的枚举是无范围的,因此写入就足够了

Types ty = Double;
Run Code Online (Sandbox Code Playgroud)

对于作用域枚举,顾名思义,枚举数在枚举范围内声明,并且必须使用enumeration-name进行限定:

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;
Run Code Online (Sandbox Code Playgroud)

  • 让我们[在聊天中继续讨论](http://chat.stackoverflow.com/rooms/61196/discussion-between-loopunroller-and-user3165438). (2认同)

Vla*_*cow 6

要么使用

Types ty = Double;  
Run Code Online (Sandbox Code Playgroud)

要么

enum  class Types {Int,Double,String};  
Types ty = Types::Double;  
Run Code Online (Sandbox Code Playgroud)

  • @ user3165438它意味着C++中所谓的范围枚举.事实上,在某些方面,它们相当于在C#中使用枚举 (2认同)