Ich kann nicht verstehen, was dorthin geht. Mit Visual Studio 2008 habe ich einen Auflauf wie folgt definiert:
enum MyType{
A,
B,
C
};
Dann verwende ich es, um eine Mitgliedsvariable zu initialisieren:
class MyClass
{
private:
bool bit_;
uint16 num_;
MyType member_;
public:
MyClass(MyType value){
member_ = value; // This the assignment which fails
} // Here, there's a breakpoint to query member_ value
};
Myclass Instance = new myclass ();
Ich verwende die Debug -Konfiguration, sodass mich beim Lesen einer Variablen keine Optimierung täuschen kann. An einem Haltepunkt kurz nach der Zuordnung zeigt der Debuger den Wert von member_ als member_ = C
.
Es könnte sich um ein Debugger -Auffrischungsproblem handeln, aber innerhalb einer Methode bewertet es sich bei Überprüfung:
if(member_ == C){
// ??
}
Und auch die Zuweisung der anderen Werte gibt seltsame Zahlen, z. B. dies member_ = B
gibt member_ = 258
beim Ferchen. Kannst du mir sagen, was los ist? Danke im Voraus.
Bearbeiten #1
Ich habe einen lustigen Effekt festgestellt, der erklärt, warum nach der Zuweisung member_ = A
der Ausdruck member_ == C
bewertet true
Für die Aufzählung mit den Standardwerten:
Für die Aufzählung
enum MyType{ A, B, C}; // equivalent to enum MyType{ A = 0, B = 1, C = 2};
Ich bekomme
MyType a = A; // but when fetching a the value is 2 (0x0002) thats the map for C!
MyType b = B; // but when fetching a the value is 258 (0x0102)
MyType c = C; // but when fetching a the value is 514 (0x0202)
Aber wenn ich mache
enum MyType{ A = 5, B = 6, C = 7};
Ich bekomme
MyType a = A; // but when fetching a the value is 1282 (0x0502)
MyType b = B; // but when fetching a the value is 1538 (0x0602)
MyType c = C; // but when fetching a the value is 1794 (0x0702)
Wenn Sie diese #?!^% Enum zuweisen, scheint die Regel 8 Bit zu verschieben und 2 hinzuzufügen. Es klingt nach Compiler -Problemen.
Übrigens, machen Sie die Art von member_
sein int
stattdessen MyType
ändert nichts.
Bearbeiten #2Zwei weitere Mitglieder in der Klasse hinzugefügt, die die wahre Ursache des Problems sind. Ich werde die Antwort veröffentlichen, sobald die Zeitbeschränkung verschwindet (8h nach der Veröffentlichung der Frage).