2013-04-30 56 views
7

我正在使用gcc和-std = C++ 11標誌。在我的班級定義中,我有以下幾點:在switch語句中使用const int變量

private: 
    const int January  = 1, 
       February = 2, 
       March  = 3, 
       ... 

在我的實現中,我有一個switch語句。

switch (currentMonth) 
{ 
    case January: 
     returnString = "January"; 
     break; 
    case February: 
     returnString = "February"; 
     break; 
    case March: 
     returnString = "March"; 
     break; 
    ... 

這看起來像它應該工作,因爲月是恆定的;然而,海灣合作委員會給我

calendar.cpp:116:12: error: ‘this’ is not a constant expression 

對每個case switch語句..爲什麼這是錯誤的?

+0

該線在你的例子是'116',它是不是在一個如果分配?或者'switch'本身的情​​況? – 2013-04-30 22:55:40

+0

我編輯的帖子更清晰 – kennycoc 2013-04-30 22:58:35

回答

11

非靜態類成員不是常量表達式。試試這個:

static constexpr int January = 1; 
+1

+1,這可能是。注意,對於C++ 03兼容的東西,'static const int January = 1;'也可以。 – 2013-04-30 22:58:16

+0

我對'static'關鍵字並不熟悉,但我的印象是使用'new'創建一個靜態對象;那麼這是否意味着這與使用'new'相同?這意味着在我的析構函數中,我需要在每個函數上調用delete?或者是完全不同的? – kennycoc 2013-04-30 23:03:12

+6

@kennycoc:不,使用'new'不會創建靜態對象,您從哪裏聽到的? – 2013-04-30 23:18:54

2

試試這個:

enum { 
January = 1, 
February = 2 
... 
}; 
+0

更好的是,嘗試一些可以編譯的東西。 – 2013-04-30 22:57:18

+0

我現在沒有訪問權限,這不起作用? – 2013-04-30 22:58:06

+0

'enum int'應該只是'enum'(或者在C++ 11中,也許是'enum:int',如果你由於某種原因特別希望底層類型是'int'),並且它需要一個分號宣言。 – 2013-04-30 23:01:22