我有一些靜態常量成員爲什麼靜態常量成員不能出現在常量表達式,如「開關」
.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
以下宣言有一點我想在開關中使用這些值:
unsigned char value;
...
switch(value) {
case MyClass::sInvalid : /*Do some ;*/ break;
case MyClass::sOutside : /*Do some ;*/ break;
...
}
但是我得到以下編譯器錯誤:錯誤:'MyClass :: sInvalid'不能出現在常量表達式中。
我已閱讀其他開關不能出現恆定的東西,並沒有找到我的答案,因爲我不明白爲什麼這些static const unsigned char
不是恆定表達式。
我正在使用gcc 4.5。
-1錯誤。您應該指定初始化應該在**類的定義內部,而不僅僅是頭部。如果您在標題中初始化它們,但在課程外部,則會出現鏈接錯誤。 –
@LuchianGrigore:好的,我說得很清楚。 – jpalecek
+1有效的解決方案,但我仍然是一個枚舉在這裏更好。 –