C++中switch case 中定義變數
在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,這句不存在不跳過的可能。報錯原因不明。