2017-08-01 3 views
2

Ich versuche, die (char) enum zu verwenden, um meine Ränge zu speichern und sie dann mit cout auszugeben, aber es geht nicht richtig aus.Falsche Werte ausgegeben von Enum

#include <iostream> 

using namespace std;  

enum rank : char { 
    first = '1', second = '2', third = '3' 
}; 

int main() 
{ 
    // other code ... 
    cout << rank::third; 
    // other code ... 
} 

Es gibt 51 aus !!! hier - (?) http://ideone.com/8vHzQ5

Das sieht aus wie ascii Werte so sollte ich caste sie zurück zu verkohlen oder eine andere Art (warum muss ich so tun, wenn ich bereits char gegen diese Enum geschrieben habe), sonst was ist hier falsch?

+1

Ja, werfen Sie es zurück auf 'char'. 'Enum'-Werte sind im Grunde' int'. Das gleiche wie 'int n =' 1 '; std :: cout << n; ' –

+1

Sie können auch eine Überladung für' std :: ostream & operator << 'erstellen, wie im Beispiel unten auf der Referenzseite zu sehen: http://en.cppreference.com/w/cpp/Sprache/enum – UnholySheep

Antwort

2

Standardmäßig werden Enum-Werte in diesem Fall als int behandelt. 51 ist der dezimale ASCII-Wert 3; Wenn Sie 3 drucken möchten, müssen Sie es explizit umwandeln.

std::cout << static_cast<char>(rank::third);