I have two static member declarations in ClsA
, like this:
class ClsA {
public:
static unsigned short m_var1;
static unsigned short m_var2;
};
unsigned short ClsA::m_var1 = 1001;
unsigned short ClsA::m_var2 = 1002;
In ClsB
, I use those static member declarations from ClsA
like this:
unsigned short var1; // assume var1 is declare/use some where in the code.
switch( var1 ) {
case ClsA::m_var1: // Error: cannot appear in a constant-expression
break;
case ClsB::m_var2: // Error: cannot appear in a constant-expression
break;
}
Why do I get an error if I use that in a switch statement? There is no error if I use it in an if statement.
C++ requires the case
to have a constant-expression as its argument. What does that mean? It means that the only operands that are legal in constant expressions are:
const
that are initialized with constant expressionssizeof
expressionsIn your case, if you declared your static members as const
, and initialized them when declared with an integral constant expression, you could use them in switch-case statements. For example,
class ClsA {
public:
static const unsigned short m_var1 = 13;
static const unsigned short m_var2 = 42;
};
If, on the other hand, you insist on switching on a variable to avoid multiple if-else if statements, I would suggest using a jump table (it's also referred as a lookup table).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With