Como corrigir o erro ‘Jump to Case Label Crosses Initialization’ em C++

Como Corrigir O Erro Jump To Case Label Crosses Initialization Em C



A instrução switch é a melhor alternativa para a instrução if-else-if longa, pois reduz o comprimento do código e traz maior clareza. O valor é avaliado usando a instrução switch e testado em relação aos valores de cada rótulo de caso. Se a correspondência for encontrada, o código é executado antes do break, caso contrário, executa o código após o “default”.

O que causa o erro ‘Jump to Case Label Crosses Initialization’ em C++

Ao usar a instrução switch, em C++ um erro comum que pode ser observado é ‘Jump to Case Label Crosses Initialization’. Este erro geralmente aparece devido à declaração incorreta de uma variável dentro do rótulo do caso. Aqui está um exemplo de programa para demonstrar o erro ‘Jump to Case Label Crosses Initialization’ em C++:







#include
#incluir
usando namespace std;
vazio menu_display ( ) ;
int menu_escolha ( ) ;
vazio get_two_operands ( interno & n, int & eu ) ;
int adicionar ( int n, int m ) ;
subtração interna ( int n, int m ) ;


principal interno ( )
{
seleção interna;

fazer
{
menu_display ( ) ;
seleção = menu_escolha ( ) ;
interno x, y;
trocar ( seleção )
{
caso 1 :

obter_dois_operandos ( x, você ) ;
interno soma = adicionar ( x, você ) ;
corte << x << '+' << e << '=' << soma << fim;

quebrar ;

caso 2 :

obter_dois_operandos ( x, você ) ;

interno diferença = subtrair ( x, você ) ;
corte << x << '-' << e << '=' << diferença << fim;

quebrar ;
padrão:;
}

} enquanto ( seleção ! = 3 ) ;

corte << 'Programa encerrado' << fim;

retornar 0 ;
}


vazio menu_display ( )
{
corte << fim;
corte << 'Calculadora Básica' << fim;
corte << ' 1. Adicionar (+) ' << fim;
corte << '2. Subtrair (-)' << fim;
corte << '3. Sair' << fim;

corte << fim;
}

int get_menu_choice ( )
{
escolha interna;
corte << 'Escolha inválida, tente novamente:' ;
comendo >> seleção;

enquanto ( ( ( seleção < 1 ) || ( seleção > 3 ) ) && ( ! cin.fail ( ) ) )
{
corte << ':' ;
comendo >> seleção;
}
se ( cin.fail ( ) )
{
corte << 'Erro' << fim;
saída ( 1 ) ;
}
retornar seleção;
}

vazio get_two_operands ( interno & n, int & eu )
{
corte << 'Dê dois operandos' << fim;
corte << 'Primeiro operando:' ;
comendo >> n;
corte << 'Segundo operando:' ;
comendo >> m;

}


int adicionar ( int n, int m )
{
retornar ( n + m ) ;
}

subtração interna ( int n, int m )
{
retornar ( n-m ) ;
}


Quando este programa é executado, ele retorna um erro ‘Jump to Case Label’. Este é um erro de compilação.



Este erro aparece devido à declaração da variável dentro de uma instrução case sem os colchetes. O caso é apenas um rótulo, portanto não tem a capacidade de restringir a disponibilidade dos parâmetros escritos nele. Quando o código acima for executado as variáveis ​​do caso 1 poderão ser acessadas pelo caso 2, e aparecerá como não inicializado levando a erros.







Como corrigir o erro ‘Jump to Case Label Crosses Initialization’ em C++

Este erro pode ser corrigido usando colchetes dentro do bloco case, o que criará um escopo fechado e os parâmetros dos diferentes blocos case não serão manipulados.

Código depurado

Este é o código depurado para o erro acima. O erro é corrigido colocando os dados nos casos entre colchetes:



#include
#incluir
usando namespace std;
vazio menu_display ( ) ;
int menu_escolha ( ) ;
vazio get_two_operands ( interno & n, int & eu ) ;
int adicionar ( int n, int m ) ;
subtração interna ( int n, int m ) ;


principal interno ( )
{
seleção interna;

fazer
{
menu_display ( ) ;
seleção = menu_escolha ( ) ;
interno x, y;
trocar ( seleção )
{
caso 1 :
{
obter_dois_operandos ( x,y ) ;
interno soma = adicionar ( x,y ) ;
corte << x << '+' << e << '=' << soma << fim;
}
quebrar ;
caso 2 :
{
obter_dois_operandos ( x, você ) ;
interno diferença = subtrair ( x,y ) ;
corte << x << '-' << e << '=' << diferença << fim;
}
quebrar ;
padrão:;
}

} enquanto ( seleção ! = 3 ) ;

corte << 'Programa encerrado' << fim;

retornar 0 ;
}


vazio menu_display ( )
{
corte << fim;
corte << 'Calculadora Básica' << fim;
corte << ' 1. Adicionar (+) ' << fim;
corte << '2. Subtrair (-)' << fim;
corte << '3. Sair' << fim;
corte << fim;
}

int menu_escolha ( )
{
seleção interna;
corte << 'Escolha a operação:' ;
comendo >> seleção;

enquanto ( ( ( seleção < 1 ) || ( seleção > 3 ) ) && ( ! cin.fail ( ) ) )
{
corte << 'Escolha inválida, tente novamente:' ;
comendo >> seleção;
}
se ( cin.fail ( ) )
{
corte << 'Erro' << fim;
saída ( 1 ) ;
}
retornar seleção;
}

vazio get_two_operands ( interno & n, int & eu )
{
corte << 'Dê dois operandos' << fim;
corte << 'Primeiro operando:' ;
comendo >> n;
corte << 'Segundo operando:' ;
comendo >> m;

}


int adicionar ( int n, int m )
{
retornar ( n + m ) ;
}

subtração interna ( int n, int m )
{
retornar ( n-m ) ;
}


Após o uso de colchetes nos blocos case do código, o erro foi corrigido e a saída é exibida:

Conclusão

A instrução switch é a melhor alternativa para a instrução if-else-if longa, pois reduz o comprimento do código e traz maior clareza. Ao usar a instrução switch, em C++ um erro de compilação comum que pode ser observado é ‘Jump to Case Label Crosses Initialization’. Este erro geralmente aparece devido à declaração incorreta de uma variável dentro do rótulo do caso. Isso pode ser corrigido usando colchetes ao redor dos dados nos blocos de casos.