Цитата(Метценгерштейн @ Mar 24 2017, 21:28)

Из-за этого ругается?
Example:
Код
int main(void){
int choice = 1;
int z =1;
switch(choice)
{
case 1:
int y = 1;
z = y + z;
break;
case 2:
break;
}
return 0;
In the example, y is an initialized variable that is in scope (but unused) in the other cases.
The C++ Standard says in section 6.7:
Цитата
It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that jumps from a point where a local variable with automatic storage duration is not in scope to a point where it is in scope is ill-formed unless the variable has POD type (3.9) and is declared without an initializer (8.5).
NoteThe transfer from the condition of a switch statement to a case label is considered a jump in this respect.
The usual way to fix this is to enclose the case that declares y in braces:
Код
case 1: {
int y = 1;
z = y + z;
}
break;
Because y is a POD (Plain Old Data) type, so an alternative is to not use initialization:
Код
case 1:
int y;
y = 1;
z = y + z;
break;