Não consigo entender o que está acontecendo lá. Usando o Visual Studio 2008, eu defini uma enumeração como esta:
enum MyType{
A,
B,
C
};
Então eu o uso para inicializar uma variável de membro:
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 Instância = new MyClass ();
Estou usando a configuração de depuração, portanto, nenhuma otimização pode me enganar ao ler uma variável. Em um ponto de interrupção logo após a tarefa, o depurador mostra o valor de membro_ como member_ = C
.
Pode ser um problema de depurador Whatch Refresh, mas, dentro de um método, ele avalia verdadeiro ao verificar:
if(member_ == C){
// ??
}
E também, atribuir aos outros valores fornece números estranhos, por exemplo, fazendo member_ = B
dá member_ = 258
Ao ferrar. Você pode me dizer o que há de errado? Desde já, obrigado.
Editar #1
Eu notei um efeito engraçado que explica por que depois de atribuir member_ = A
a expressão member_ == C
avalia para true
Para a enumeração com os valores padrão:
Para a enumeração
enum MyType{ A, B, C}; // equivalent to enum MyType{ A = 0, B = 1, C = 2};
eu recebo
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)
Mas se eu fizer
enum MyType{ A = 5, B = 6, C = 7};
eu recebo
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)
Então, ao atribuir esse #?!
Btw, fazendo o tipo de member_
ser int
em vez de MyType
Não muda nada.
Editar #2Adicionou mais dois membros à classe, que são a causa real do problema. Postarei a resposta assim que a restrição de tempo desaparecer (8h a partir da publicação da pergunta).