Почему статические члены const не могут появляться в постоянном выражении, таком как «switch»
У меня есть следующее объявление некоторых статических членов const
.час
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
В какой-то момент я хочу использовать эти значения в переключателе, как:
unsigned char value;
...
switch(value) {
case MyClass::sInvalid : /*Do some ;*/ break;
case MyClass::sOutside : /*Do some ;*/ break;
...
}
Но я получаю следующую ошибку компилятора:error: 'MyClass::sInvalid' cannot appear in a constant-expression.
Я прочитал другое переключение-не могу-появиться-постоянный материал и не нашел ответа для меня, так как я не понимаю, почему теstatic const unsigned char
не являются константным выражением.
Я использую GCC 4.5.