C++ 在switch语句中使用const int变量
我正在使用带有-std=c++11标志的gcc。在我的类定义中,我有以下内容: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
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++。我肯定我只是误解了。