Hvordan fikse 'Jump to Case Label Crosses Initialization'-feil i C++

Hvordan Fikse Jump To Case Label Crosses Initialization Feil I C



Switch-setningen er det beste alternativet for den lange if-else-if-setningen, siden den reduserer lengden på koden og gir bedre klarhet. Verdien evalueres ved hjelp av switch-setningen og testes mot verdiene til hver saksetikett. Hvis samsvaret blir funnet, kjøres koden før pausen, ellers kjører den koden etter 'standard'.

Hva som forårsaker 'Jump to Case Label Crosses Initialization'-feil i C++

Når du bruker switch-setningen, i C++ er en vanlig feil som kan observeres 'Jump to Case Label Crosses Initialization'. Denne feilen vises vanligvis på grunn av feil deklarasjon av en variabel i saksetiketten. Her er et eksempelprogram for å demonstrere 'Jump to Case Label Crosses Initialization'-feilen i C++:







#include
#include
bruker navneområde std;
void menu_display ( ) ;
int choice_menu ( ) ;
void get_two_operander ( int & n, int & m ) ;
int add ( int n, int m ) ;
int trekke fra ( int n, int m ) ;


int main ( )
{
int utvalg;

gjøre
{
menu_display ( ) ;
utvalg = valgmeny ( ) ;
int x, y;
bytte om ( utvalg )
{
sak 1 :

få_to_operander ( x, y ) ;
int sum = legge til ( x,y ) ;
cout << x << '+' << og << ' = ' << sum << endl;

gå i stykker ;

sak 2 :

få_to_operander ( x, y ) ;

int diff = trekke fra ( x, y ) ;
cout << x << '-' << og << ' = ' << diff << endl;

gå i stykker ;
misligholde:;
}

} samtidig som ( utvalg ! = 3 ) ;

cout << 'Program avsluttet' << endl;

komme tilbake 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'Grunnleggende kalkulator' << endl;
cout << ' 1. Legg til (+) ' << endl;
cout << ' 2. Trekk fra (-) ' << endl;
cout << '3. Avslutt' << endl;

cout << endl;
}

int get_menu_choice ( )
{
int valg;
cout << 'Ugyldig valg Prøv igjen: ' ;
spiser >> utvalg;

samtidig som ( ( ( utvalg < 1 ) || ( utvalg > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << ': ' ;
spiser >> utvalg;
}
hvis ( cin.fail ( ) )
{
cout << 'Feil' << endl;
exit ( 1 ) ;
}
komme tilbake utvalg;
}

void get_two_operander ( int & n, int & m )
{
cout << 'Gi to operander' << endl;
cout << 'Første operand: ' ;
spiser >> n;
cout << 'Andre operand: ' ;
spiser >> m;

}


int add ( int n, int m )
{
komme tilbake ( n + m ) ;
}

int trekke fra ( int n, int m )
{
komme tilbake ( n - m ) ;
}


Når dette programmet kjøres, returnerer det en 'Jump to Case Label'-feil. Dette er en kompileringsfeil.



Denne feilen vises på grunn av deklarasjonen av variabelen i en sakssetning uten de omsluttende parentesene. Saken er bare en etikett, så den har ikke muligheten til å begrense tilgjengeligheten til parametrene skrevet under den. Når koden ovenfor utføres, kan variablene i tilfelle 1 nås av tilfelle 2, og den vil fremstå som uinitialisert som fører til feil.







Hvordan fikse 'Jump to Case Label Crosses Initialization'-feil i C++

Denne feilen kan fikses ved å bruke parentes inne i case-blokken, som vil skape et lukket omfang og parameterne til de forskjellige case-blokkene vil ikke bli manipulert.

Feilsøkt kode

Dette er den feilsøkte koden for feilen ovenfor. Feilen rettes ved å legge dataene under saker innenfor parentes:



#include
#include
bruker navneområde std;
void menu_display ( ) ;
int choice_menu ( ) ;
void get_two_operander ( int & n, int & m ) ;
int add ( int n, int m ) ;
int trekke fra ( int n, int m ) ;


int main ( )
{
int utvalg;

gjøre
{
menu_display ( ) ;
utvalg = valgmeny ( ) ;
int x, y;
bytte om ( utvalg )
{
sak 1 :
{
få_to_operander ( x, y ) ;
int sum = legge til ( x, y ) ;
cout << x << '+' << og << ' = ' << sum << endl;
}
gå i stykker ;
sak 2 :
{
få_to_operander ( x, y ) ;
int diff = trekke fra ( x, y ) ;
cout << x << '-' << og << ' = ' << diff << endl;
}
gå i stykker ;
misligholde:;
}

} samtidig som ( utvalg ! = 3 ) ;

cout << 'Program avsluttet' << endl;

komme tilbake 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'Grunnleggende kalkulator' << endl;
cout << ' 1. Legg til (+) ' << endl;
cout << ' 2. Trekk fra (-) ' << endl;
cout << '3. Avslutt' << endl;
cout << endl;
}

int choice_menu ( )
{
int utvalg;
cout << 'Velg operasjonen:' ;
spiser >> utvalg;

samtidig som ( ( ( utvalg < 1 ) || ( utvalg > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << 'Ugyldig valg Prøv igjen: ' ;
spiser >> utvalg;
}
hvis ( cin.fail ( ) )
{
cout << 'Feil' << endl;
exit ( 1 ) ;
}
komme tilbake utvalg;
}

void get_two_operander ( int & n, int & m )
{
cout << 'Gi to operander' << endl;
cout << 'Første operand: ' ;
spiser >> n;
cout << 'Andre operand: ' ;
spiser >> m;

}


int add ( int n, int m )
{
komme tilbake ( n + m ) ;
}

int trekke fra ( int n, int m )
{
komme tilbake ( n - m ) ;
}


Etter bruk av omsluttende parenteser i kodens boksblokker, er feilen rettet og utgangen vises:

Konklusjon

Switch-setningen er det beste alternativet for den lange if-else-if-setningen, siden den reduserer lengden på koden og gir bedre klarhet. Når du bruker switch-setningen, i C++ er en vanlig kompileringsfeil som kan observeres 'Jump to Case Label Crosses Initialization'. Denne feilen vises vanligvis på grunn av feil deklarasjon av en variabel i saksetiketten. Dette kan fikses ved å bruke omsluttende parentes rundt dataene under saksblokker.