Que tal..
Este error sinceramente no le hallo lógica, imagino que debe ser un tipo de política de c++...
void FuncionA(int indice){
switch (indice){
case 0:
int edad = 0; //Error C2360
//hacer otra cosa...
case 1:
//hacer otras cosas...
}
}
void FuncionA(int indice){
switch (indice){
case 0:
int edad;
edad = 0; //Esto no da error
case 1:
//hacer otras cosas...
}
}
Debo declarar siempre sin definir una variable cuando entro al cuerpo de un case ?
Esto sucede porque una variable creada en un <case> del <switch> sigue existiendo en el resto de <case>. Pero no tienen el valor inicializado y por eso si escribes la inicialización junto a la declaración, te va a dar un error.
Una forma de solucionar eso es separando la inicialización de la declaración como has visto tú. Y otra forma es usar llaves {} para crear un bloque. :-X
switch(indice){
case 0:
{
int edad = 0;
// ya funciona
break; // no olvidar el break
}
case 1:
// lo que sea
break;
default:
// lo que sea
break; // opcional ya que es el ultimo
}
entiendo me suena aun un poco extraño pero ya veo como funciona...
Gracias.
En C++ esta permitido saltar sobre definiciones.
{
// algunas instrucciones antes ...
goto etiqueta; // salto incondicional a donde este' la etiqueta
int x; // permitido saltarse esto
// mas instrucciones ...
etiqueta:
x = 1; // pero a pesar del salto la variable x existe aqui, con valor inicial desconocido.
}
Pero esta prohibido saltar las declaraciones con inicializaciones.
Ejemplo:
{
// algunas instrucciones antes ...
goto etiqueta; // salto incondicional
int x = 3; // no esta permitido saltarse esto
// mas instrucciones ...
etiqueta:
// no se puede saltar aqui
}
cada case de un switch es una etiqueta, y la variable es visible dentro de todo el switch, en el case actual y los siguientes.
Dado que la ejecucion del switch es un salto a cada etiqueta, al poner una definicion con inicializacion, se da el caso que esta prohibido, por ello el error de compilacion.