簡體   English   中英

初始化枚舉c ++

[英]Initialize enum c++

我創建了一個名為Types的枚舉:

enum  Types {Int,Double,String};  

當我創建一個對象並使用其中一個枚舉允許值初始化它時,我收到以下錯誤:“錯誤:不允許輸入類型名稱”。

Types ty = Types.Double;  

有任何想法嗎?

在C ++中,有兩種不同類型的枚舉 - 范圍和非范圍的枚舉(前者隨C ++ 11引入)。 對於未作用域的枚舉器,名稱直接引入封閉范圍。

N3337§7.2/ 10

每個枚舉名稱和每個未作用域的枚舉器都在包含枚舉說明符的作用域中聲明。 每個范圍的枚舉器都在枚舉范圍內聲明。 這些名稱遵守為(3.3)和(3.4)中的所有名稱定義的范圍規則。

您的枚舉是無范圍的,因此寫入就足夠了

Types ty = Double;

對於作用域枚舉,顧名思義,枚舉數在枚舉范圍內聲明,並且必須使用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;

要么使用

Types ty = Double;  

要么

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

編譯器抱怨嘗試限定值Double ,這是Java的方法。

做就是了

Types ty = Double;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM