2013-04-30 14 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; 
    ... 

これは月が一定であるため動作するはずです。しかし、gccが私に与えます

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

switch文のそれぞれの場合には...なぜ間違っていますか?

+0

割り当てた場合、 '116'であるあなたの例ではどの行、それが1でありますか?または 'switch'自体の場合? –

+0

私はより明確になるように投稿を編集しました – kennycoc

答えて

11

非静的クラスメンバは定数式ではありません。これを試して

static constexpr int January = 1; 
+1

+1、これはおそらくそれです。注意として、何かC++ 03互換では、 'static const int January = 1;'も同様に動作します。 –

+0

私は 'static'キーワードに精通していませんが、' new'を使うと静的オブジェクトを生成するという印象を受けました。それはこれが 'new'を使うのと同じであることを意味しますか?これは、私のデストラクタでは、これらのそれぞれでdeleteを呼び出す必要があることを意味するでしょうか?それとも全く違うの? – kennycoc

+6

@kennycoc:いいえ、 'new'を使って静的オブジェクトを作成しません。あなたはそれをどこから聞いたのですか? –

2

:これを試してみてください

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

まだ、コンパイルするものを試してみてください。 –

+0

私は今アクセスできませんが、これはうまくいかないでしょうか? –

+0

'enum int'は単に' enum'でなければなりません(何かの理由で基底の型を 'int'にしたい場合はC++ 11ではおそらく' enum:int')、その後にセミコロン宣言。 –

関連する問題