在C++中switch case中定义变量
1.
int n = 3;
//代码1
switch (n)
{
case 2:
int y = 4;
cout << y << endl;
break;
case 3:
int z = 5;
cout << z << endl;
break;
}
报错信息:error C2360: “y”的初始化操作由“case”标签跳过
这是因为可能出现在case 2中定义了,但是在case 3中使用了(当然,我们没在case3中使用了,但编译器认为这种可能会发生),但程序执行的跳过了case 2,执行的是case 3,这个时候在case 3中使用y相当于使用了一个没有定义的变量,相当于出现这种代码:
//代码2
int n = 3;
switch (n)
{
case 2:
int y = 4;
cout << y << endl;
break;
case 3:
cout << y << endl;
break;
}
代码2中的case 3没有报错,原因是在case 3,int z的作用域在它的下面都可以使用,不存在作用域的问题。
解决办法:
1.在switch上面定义变量
2.在case中加上大括号,限定变量的作用域
//代码3
int n = 3;
switch (n)
{
case 2:
{
int y = 3;
cout << y << endl;
}
break;
case 3:
cout << n << endl;
break;
}
3.先定义,在赋值
//代码4
int n = 3;
switch (n)
{
case 2:
int y;
y = 3;
cout << y << endl;
break;
case 3:
cout << n << endl;
break;
}
//代码5
int n = 3;
switch (n)
{
int y = 3;
case 2:
cout << y << endl;
break;
case 3:
cout << n << endl;
break;
}
在这里两个case语句都有报错,“y”的初始化操作由“case”标签跳过。代码4中按理来说y的已经定义并初始化了,且这个int y=3,这句不存在不跳过的可能。报错原因不明。