Hoe u de fout ‘Jump to Case Label Crosses Initialization’ in C++ kunt oplossen

Hoe U De Fout Jump To Case Label Crosses Initialization In C Kunt Oplossen



De switch-instructie is het beste alternatief voor de lange if-else-if-instructie, omdat deze de lengte van de code verkort en voor meer duidelijkheid zorgt. De waarde wordt geëvalueerd met behulp van de switch-instructie en wordt getest aan de hand van de waarden van elk caselabel. Als de overeenkomst wordt gevonden, wordt de code vóór de pauze uitgevoerd, anders wordt de code na de “standaard” uitgevoerd.

Wat veroorzaakt de fout ‘Jump to Case Label Crosses Initialization’ in C++

Tijdens het gebruik van de switch-instructie is in C++ een veel voorkomende fout die kan worden waargenomen ‘Jump to Case Label Crosses Initialization’. Deze fout treedt meestal op als gevolg van de onjuiste declaratie van een variabele binnen het caselabel. Hier is een voorbeeldprogramma om de fout ‘Jump to Case Label Crosses Initialization’ in C++ te demonstreren:







#include
#include
namespace std; gebruiken;
ongeldig menu_display ( ) ;
int keuze_menu ( ) ;
void get_two_operands ( int & n, int & M ) ;
int toevoegen ( int n, int m ) ;
int aftrekken ( int n, int m ) ;


int. hoofd ( )
{
int-selectie;

Doen
{
menu_weergave ( ) ;
selectie = keuze_menu ( ) ;
int x, y;
schakelaar ( selectie )
{
geval 1 :

get_twee_operands ( x,y ) ;
int som = toevoegen ( x,y ) ;
uit << X << '+' << En << ' = ' << som << eind;

pauze ;

geval 2 :

get_twee_operands ( x, y ) ;

int verschil = aftrekken ( x,y ) ;
uit << X << '-' << En << ' = ' << verschil << eind;

pauze ;
standaard:;
}

} terwijl ( selectie ! = 3 ) ;

uit << 'Programma beëindigd' << eind;

opbrengst 0 ;
}


ongeldig menu_display ( )
{
uit << eind;
uit << 'Basisrekenmachine' << eind;
uit << ' 1. Voeg toe (+) ' << eind;
uit << ' 2. Aftrekken (-) ' << eind;
uit << ' 3. Afsluiten' << eind;

uit << eind;
}

int get_menu_choice ( )
{
int-keuze;
uit << 'Ongeldige keuze Probeer opnieuw: ' ;
aan het eten >> selectie;

terwijl ( ( ( selectie < 1 ) || ( selectie > 3 ) ) && ( ! cin.fail ( ) ) )
{
uit << ': ' ;
aan het eten >> selectie;
}
als ( cin.fail ( ) )
{
uit << 'Fout ' << eind;
Uitgang ( 1 ) ;
}
opbrengst selectie;
}

void get_two_operands ( int & n, int & M )
{
uit << 'Geef twee operanden' << eind;
uit << 'Eerste operand: ' ;
aan het eten >> N;
uit << 'Tweede operand: ' ;
aan het eten >> M;

}


int toevoegen ( int n, int m )
{
opbrengst ( n+m ) ;
}

int aftrekken ( int n, int m )
{
opbrengst ( n - m ) ;
}


Wanneer dit programma wordt uitgevoerd, retourneert het de fout ‘Jump to Case Label’. Dit is een compilatiefout.



Deze fout treedt op vanwege de declaratie van de variabele in een case-instructie zonder de omsluitende haakjes. De case is slechts een label en heeft dus niet de mogelijkheid om de beschikbaarheid van de parameters die eronder zijn geschreven te beperken. Wanneer de bovenstaande code wordt uitgevoerd, zijn de variabelen van geval 1 toegankelijk voor geval 2, en deze zal als niet-geïnitialiseerd verschijnen, wat tot fouten leidt.







Hoe u de fout ‘Jump to Case Label Crosses Initialization’ in C++ kunt oplossen

Deze fout kan worden verholpen door haakjes in het case-blok te gebruiken, waardoor een ingesloten bereik ontstaat en de parameters van de verschillende case-blokken niet worden gemanipuleerd.

Gedebugde code

Dit is de foutopsporingscode voor de bovenstaande fout. De fout wordt verholpen door de gegevens onder de gevallen tussen haakjes te plaatsen:



#include
#include
namespace std; gebruiken;
ongeldig menu_display ( ) ;
int keuze_menu ( ) ;
void get_two_operands ( int & n, int & M ) ;
int toevoegen ( int n, int m ) ;
int aftrekken ( int n, int m ) ;


int. hoofd ( )
{
int-selectie;

Doen
{
menu_weergave ( ) ;
selectie = keuze_menu ( ) ;
int x, y;
schakelaar ( selectie )
{
geval 1 :
{
get_twee_operands ( x,y ) ;
int som = toevoegen ( x, y ) ;
uit << X << '+' << En << ' = ' << som << eind;
}
pauze ;
geval 2 :
{
get_twee_operands ( x,y ) ;
int verschil = aftrekken ( x,y ) ;
uit << X << '-' << En << ' = ' << verschil << eind;
}
pauze ;
standaard:;
}

} terwijl ( selectie ! = 3 ) ;

uit << 'Programma beëindigd' << eind;

opbrengst 0 ;
}


ongeldig menu_display ( )
{
uit << eind;
uit << 'Basisrekenmachine' << eind;
uit << ' 1. Voeg toe (+) ' << eind;
uit << ' 2. Aftrekken (-) ' << eind;
uit << ' 3. Afsluiten' << eind;
uit << eind;
}

int keuze_menu ( )
{
int-selectie;
uit << 'Kies de bewerking:' ;
aan het eten >> selectie;

terwijl ( ( ( selectie < 1 ) || ( selectie > 3 ) ) && ( ! cin.fail ( ) ) )
{
uit << 'Ongeldige keuze Probeer opnieuw: ' ;
aan het eten >> selectie;
}
als ( cin.fail ( ) )
{
uit << 'Fout' << eind;
Uitgang ( 1 ) ;
}
opbrengst selectie;
}

void get_two_operands ( int & n, int & M )
{
uit << 'Geef twee operanden' << eind;
uit << 'Eerste operand: ' ;
aan het eten >> N;
uit << 'Tweede operand: ' ;
aan het eten >> M;

}


int toevoegen ( int n, int m )
{
opbrengst ( n+m ) ;
}

int aftrekken ( int n, int m )
{
opbrengst ( n - m ) ;
}


Na het gebruik van tussenhaakjes in de case-blokken van de code is de fout verholpen en wordt de uitvoer weergegeven:

Conclusie

De switch-instructie is het beste alternatief voor de lange if-else-if-instructie, omdat deze de lengte van de code verkort en voor meer duidelijkheid zorgt. Tijdens het gebruik van de switch-instructie is in C++ een veel voorkomende compilatiefout die kan worden waargenomen ‘Jump to Case Label Crosses Initialization’. Deze fout treedt meestal op als gevolg van de onjuiste declaratie van een variabele binnen het caselabel. Dit kan worden opgelost door gebruik te maken van omsluitende haakjes rond de data under case-blokken.