enum class -> error und enum -> ok?
-
Hallo,
// irgendwo in einer Klasse enum class Type1 : unsigned int { A = 0, B = 1 } enum Type2 { A = 0, B = 1 } void hello(unsigned in) { /** ... **/} // hello(Type1::A); --> Error hello(Type2::A); --> Ok.... error: no matching function for call '...'... g++ 4.4.5Wieso bekomme ich bei dem ersten einen Fehler gemeldet?
Wie komme ich an den Wert bei Type1 ran?Danke Thomas
-
Ich nehme mal an, Kapitel 2.6 hier dürfte das Problem erklären. Die aus C geerbten normalen enums können implizit nach int konvertiert werden, die neue enum-class nicht. (vielleicht kann einer der C++0X-Experten sagen, ob es eine explizite Umwandlung gibt)
-
Ja, dort wird enum class erklärt. Leider konnte ich bis heute aus keinen Dokument die Information entnehmen, wie ich an den Wert komme.
enum class Meins : unsigned short{ First = 10, Last = 30 };Wie komme ich an den Wert von Meins::First und Meins::Last?
-
Sinn und Zweck der neuen "enum class" ist ja gerade die Typsicherheit, d.h. daß eben keine implizite Konvertierung nach "int" möglich ist.
Du müßtest also entweder selber den Cast-Operator in der "enum class" definieren oder aber mal einen reinterpret_cast<> ausprobieren.
-
Wäre mir neu, wenn man Cast-Operatoren in
enum classdeklarieren könnte. Warumreinterpret_castund nichtstatic_cast?
-
Was spricht gegen static_cast?