elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error C2360: la inicialización de edad se omite por la etiqueta case
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error C2360: la inicialización de edad se omite por la etiqueta case  (Leído 3,156 veces)
digimikeh

Desconectado Desconectado

Mensajes: 191


Ver Perfil
Error C2360: la inicialización de edad se omite por la etiqueta case
« en: 26 Febrero 2019, 00:58 am »

Que tal..

Este error sinceramente no le hallo lógica, imagino que debe ser un tipo de política de c++...

Código
  1.  
  2. void FuncionA(int indice){
  3.  
  4.     switch (indice){
  5.  
  6.          case 0:
  7.               int edad = 0;        //Error C2360
  8.               //hacer otra cosa...
  9.  
  10.          case 1:
  11.               //hacer otras cosas...
  12.  
  13.     }
  14.  
  15. }
  16.  


Código
  1.  
  2. void FuncionA(int indice){
  3.  
  4.     switch (indice){
  5.  
  6.          case 0:
  7.               int edad;        
  8.               edad = 0;       //Esto no da error
  9.  
  10.          case 1:
  11.               //hacer otras cosas...
  12.  
  13.     }
  14.  
  15. }
  16.  


Debo declarar siempre sin definir una variable cuando entro al cuerpo de un case ?



En línea

Dungeons & dragons;
dragons.Attack();
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Error C2360: la inicialización de edad se omite por la etiqueta case
« Respuesta #1 en: 26 Febrero 2019, 01:44 am »

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
Código
  1. switch(indice){
  2.    case 0:
  3.    {
  4.        int edad = 0;
  5.        // ya funciona
  6.        break; // no olvidar el break
  7.    }
  8.    case 1:
  9.        // lo que sea
  10.        break;
  11.    default:
  12.        // lo que sea
  13.        break; // opcional ya que es el ultimo
  14. }


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
digimikeh

Desconectado Desconectado

Mensajes: 191


Ver Perfil
Re: Error C2360: la inicialización de edad se omite por la etiqueta case
« Respuesta #2 en: 26 Febrero 2019, 13:39 pm »

entiendo me suena aun un poco extraño pero ya veo como funciona...

Gracias.
En línea

Dungeons & dragons;
dragons.Attack();
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Error C2360: la inicialización de edad se omite por la etiqueta case
« Respuesta #3 en: 26 Febrero 2019, 15:51 pm »

En C++ esta permitido saltar sobre definiciones.

Código
  1. {
  2.   // algunas instrucciones antes ...
  3.  
  4.   goto etiqueta;  // salto incondicional a donde este' la etiqueta
  5.  
  6.   int x;    // permitido saltarse esto
  7.  
  8.   // mas instrucciones ...
  9.  
  10. etiqueta:
  11.  
  12.   x = 1;  // pero a pesar del salto la variable x existe aqui, con valor inicial desconocido.
  13. }

Pero esta prohibido saltar las declaraciones con inicializaciones.


Ejemplo:

Código
  1. {
  2.   // algunas instrucciones antes ...
  3.  
  4.   goto etiqueta;  // salto incondicional
  5.  
  6.   int x = 3;    // no esta permitido saltarse esto
  7.  
  8.    // mas instrucciones ...
  9.  
  10. etiqueta:
  11.     // no se puede saltar aqui
  12. }


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.

« Última modificación: 26 Febrero 2019, 17:53 pm por CalgaryCorpus » En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Existe en php esto ? $obj->edad->lenght o $obj->edad->tostring() ;
PHP
Baaaw Oic 4 4,487 Último mensaje 2 Marzo 2010, 04:34 am
por Castg!
[Error] [Win7] Error en la inicializacion OLE.
Windows
Di~OsK 1 4,436 Último mensaje 14 Mayo 2013, 09:32 am
por OmarHack
[MySQL] Consulta con LIKE omite el primer elemento al momento de listar (solved)
PHP
Diabliyo 7 3,470 Último mensaje 14 Octubre 2013, 16:42 pm
por Diabliyo
External Case, disco sin inicializar error
Dudas Generales
Corilu 0 1,988 Último mensaje 22 Septiembre 2014, 16:53 pm
por Corilu
¿Existe edad para ser gamer? ¿ Es correcto seguir jugando a cierta edad?. « 1 2 3 »
Foro Libre
Yaldabaot 22 7,643 Último mensaje 6 Diciembre 2014, 22:58 pm
por Orubatosu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines