Dlaczego statyczne elementy składowe nie mogą pojawić się w stałym wyrażeniu, takim jak „switch”

Mam następującą deklarację niektórych stałych statycznych

.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

W pewnym momencie chcę użyć tych wartości w przełączniku, takim jak:

unsigned char value;
...
switch(value) {
    case MyClass::sInvalid : /*Do some ;*/ break;
    case MyClass::sOutside : /*Do some ;*/ break;
    ...
}

Ale otrzymuję następujący błąd kompilatora:błąd: „MyClass :: sInvalid” nie może pojawić się w stałym wyrażeniu.

Przeczytałem inne rzeczy, których nie można zmienić, i nie znalazłem dla mnie odpowiedzi, ponieważ nie rozumiem dlaczegostatic const unsigned char nie są stałym wyrażeniem.

Używam gcc 4.5.

questionAnswers(3)

yourAnswerToTheQuestion