I am getting a ‘case expression not constant’ error in a switch statement. However, the header provides a definition for the used constants, and the constructor provides initialisation for them in its initialization list.
Additionally, when I mouse over the “problem” statements it identifies them as constants.
const int ThisClass::EXAMPLE_CONSTANT
error expression must have a constant value
This seems a little counter-intuitive to me. I did some research and found a similar problem that someone else had. They were told that all constants must in fact be initialised in ‘main’ and that this was a limitation of the language. Is this really the case? It seems unlikely.
The
casestatements require integral value which must be known at compile-time, which is what is meant by constant here. But theconstmembers of a class are not really constant in that sense. They’re are simply read-only.Instead of fields, you can use
enum:And then you can write,