Why static const members cannot appear in a constant expression like 'switch'
c++, constants, gcc, switch-statement
Solution
The problems you see are due to the fact that this
static const unsigned char sInvalid;
cannot be a compile time constant expression, since the compiler doesn't know its value. Initialize them in the header like this:
class MyClass : public MyBase
{
public:
static const unsigned char sInvalid = 0;
...
and it will work.
Problem
I have the following declaration of some static const members .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 ``` At some point I want to use those value in a switch like : ``` unsigned char value; ... switch(value) { case MyClass::sInvalid : /*Do some ;*/ break; case MyClass::sOutside : /*Do some ;*/ break; ... } ``` But I get the following compiler error: error: 'MyClass::sInvalid' cannot appear in a constant-expression. I have read other switch-cannot-appear-constant-stuff and didn't find an answer for me since I don't get why those `static const unsigned char` are not constant-expression. I am using gcc 4.5.