tengo la siguiente declaración de algunos miembros static constmiembros const estáticos Por qué no pueden aparecer en una expresión constante como 'interruptor'
.h
class MyClass : public MyBase
{
public:
static const unsigned char sInvalid;
static const unsigned char sOutside;
static const unsigned char sInside;
//(41 more ...)
}
.cpp
const unsigned char MyClass::sInvalid = 0;
const unsigned char MyClass::sOutside = 1;
const unsigned char MyClass::sInside = 2;
//and so on
En algún punto quiero usar esos valores en un interruptor como:
unsigned char value;
...
switch(value) {
case MyClass::sInvalid : /*Do some ;*/ break;
case MyClass::sOutside : /*Do some ;*/ break;
...
}
Pero aparece el siguiente error de compilación: error: 'MyClass :: sInvalid' no puede aparecer en una expresión constante.
He leído otras palabras de cambio-no-aparece-constante-cosas y no he encontrado una respuesta para mí ya que no entiendo por qué esos static const unsigned char
no son expresión constante.
Estoy usando gcc 4.5.
-1'd por error. Debe especificar que la inicialización debe ser ** dentro ** de la definición de clase, no solo el encabezado.Si los inicializa en el encabezado, pero fuera de la clase, obtendrá errores de enlace. –
@LuchianGrigore: OK, lo dejé claro. – jpalecek
+1 para una solución válida, pero aún creo que una enumeración es mejor aquí. –