No puedo entender lo que va allí. Usando Visual Studio 2008, he definido un enum como este:
enum MyType{
A,
B,
C
};
Luego lo uso para inicializar una variable de miembro:
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
};
Instancia myClass = new MyClass ();
Estoy usando la configuración de depuración, por lo que ninguna optimización puede engañarme al leer una variable. En un punto de interrupción justo después de la asignación, el depurador muestra el valor de member_ como member_ = C
.
Podría ser un problema del depurador de actualización, pero, dentro de un método, evalúa verdadero al verificar:
if(member_ == C){
// ??
}
Y también, asignar a los otros valores da números extraños, por ejemplo, hacer member_ = B
da member_ = 258
al ferch lo ferch. ¿Puedes decirme qué pasa? Gracias por adelantado.
Editar #1
He notado un efecto divertido que explica por qué después de asignar member_ = A
la expresion member_ == C
evaluar true
para el enum con los valores predeterminados:
Para el enum
enum MyType{ A, B, C}; // equivalent to enum MyType{ A = 0, B = 1, C = 2};
yo obtengo
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)
Pero si hago
enum MyType{ A = 5, B = 6, C = 7};
yo obtengo
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)
Entonces, al asignar ese #?^% Enum, la regla parece ser, cambiar 8 bits y agregar 2. Suena como problemas de compilador.
Por cierto, haciendo el tipo de member_
ser - estar int
en cambio MyType
No cambia nada.
Editar #2Se agregó dos miembros más a la clase, que son la verdadera causa del problema. Publicaré la respuesta tan pronto como la restricción de tiempo desaparezca (8 h de la publicación de la pregunta).