Je ne peux pas comprendre ce qui se passe là-bas. En utilisant Visual Studio 2008, j'ai défini une enum comme ceci:
enum MyType{
A,
B,
C
};
Ensuite, je l'utilise pour initialiser une variable de membre:
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
};
Instance myClass = new myClass ();
J'utilise la configuration de débogage, donc aucune optimisation ne peut me tromper lors de la lecture d'une variable. À un point d'arrêt juste après la mission, le débuger montre la valeur du membre_ comme member_ = C
.
Il pourrait s'agir d'un problème de rafraîchissement du débogueur mais, à l'intérieur d'une méthode, il évalue vrai lors de la vérification:
if(member_ == C){
// ??
}
Et aussi, attribuer aux autres valeurs donne des nombres étranges, par exemple member_ = B
donner member_ = 258
Lors de la ferche. Pouvez-vous me dire ce qui ne va pas? Merci d'avance.
EDIT # 1
J'ai noté un effet drôle qui explique pourquoi après avoir attribué member_ = A
l'expression member_ == C
évalue à true
Pour l'énumération avec les valeurs par défaut:
Pour l'énumération
enum MyType{ A, B, C}; // equivalent to enum MyType{ A = 0, B = 1, C = 2};
Je reçois
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)
Mais si je fais
enum MyType{ A = 5, B = 6, C = 7};
Je reçois
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)
Donc, lorsque vous attribuez ce #?! ^% Enum, la règle semble être, changer 8 bits et ajouter 2. Cela ressemble à des problèmes de compilateur.
Btw, faisant le type de member_
être int
Au lieu MyType
ne change rien.
EDIT # 2Ajout de deux autres membres à la classe, qui sont la vraie cause du problème. Je publierai la réponse dès que la restriction du temps disparaît (8h de la publication de la question).