C++ 在switch语句中使用const int变量

C++ 在switch语句中使用const int变量,c++,gcc,c++11,C++,Gcc,C++11,我正在使用带有-std=c++11标志的gcc。在我的类定义中,我有以下内容: private: const int January = 1, February = 2, March = 3, ... 在我的实现中,我有一个switch语句 switch (currentMonth) { case January: returnString = "Ja

我正在使用带有-std=c++11标志的gcc。在我的类定义中,我有以下内容:

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语句的每种情况下..为什么这是错误的?

非静态类成员不是常量表达式。试试这个:

static constexpr int January = 1;
试试这个:

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

在您的示例中,哪一行是
116
,如果指定的是一行,它是否在一行上?或者是
开关本身的一个例子?我编辑了这篇文章以便更清晰更好,尝试一些可以编译的东西。
enum int
应该是
enum
(或者,在C++11中,如果出于某种原因特别希望底层类型是
int
,那么可能是
enum:int
),声明后需要一个分号。如果您有浏览器和internet连接,则可以访问编译器。实际上很多。例如:@BenjaminLindley很酷,谢谢。我只知道jsfiddle和repl。对于那些将要查找它的人来说,它有一些更新:使用
enum class
而不是
enum
,它会给你类型检查+1,这可能就是它。注意,对于与c++03兼容的东西,
static const int janur=1
也可以。我不熟悉
static
关键字,但我的印象是使用
new
创建静态对象;那么这是否意味着这与使用
new
相同?这意味着在我的析构函数中,我需要对每一个调用delete?还是完全不同?@ Knycoc:不,使用<代码>新< /代码>不创建静态对象,你在哪里听到的?我正在通过PultLaVIEW学习C++。我肯定我只是误解了。