ho la seguente dichiarazione di alcuni membri static constmembri const Perché statici non possono apparire in un'espressione costante come 'interruttore'
.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
A un certo punto voglio usare quei valori in un interruttore come:
unsigned char value;
...
switch(value) {
case MyClass::sInvalid : /*Do some ;*/ break;
case MyClass::sOutside : /*Do some ;*/ break;
...
}
Ma ho il seguente errore del compilatore: errore: "MyClass :: sInvalid" non può apparire in un'espressione costante.
Ho letto altro switch-non-può-essere-costante-roba e non ho trovato una risposta per me dal momento che non capisco perché quelli static const unsigned char
non sono un'espressione costante.
Sto utilizzando gcc 4.5.
-1 per errore. È necessario specificare che l'inizializzazione dovrebbe essere ** all'interno ** della definizione della classe, non solo dell'intestazione.Se li inizializzi nell'intestazione, ma al di fuori della classe, riceverai errori di collegamento. –
@LuchianGrigore: OK, l'ho chiarito. – jpalecek
+1 per una soluzione valida, ma continuo a pensare che un enum è meglio qui. –