Hogyan javítsuk ki a „Jump to Case Label Crosses Initialization” hibát a C++ nyelven

Hogyan Javitsuk Ki A Jump To Case Label Crosses Initialization Hibat A C Nyelven



A switch utasítás a legjobb alternatíva a hosszú if-else-if utasításhoz, mivel csökkenti a kód hosszát és jobb áttekinthetőséget biztosít. Az érték kiértékelése a switch utasítás használatával történik, és az egyes esetcímkék értékei alapján tesztelik. Ha megtalálja az egyezést, a kód a szünet előtt, ellenkező esetben az „alapértelmezett” után fut le.

Mi okozza a „Jump to Case Label Crosses Initialization” hibát a C++ nyelven

A switch utasítás használata közben a C++ nyelvben egy gyakori hiba, amely megfigyelhető: „Ugrás a Case Label Crosses Initialization-hoz”. Ez a hiba általában egy változó helytelen deklarálása miatt jelenik meg az esetcímkén belül. Íme egy példaprogram a „Jump to Case Label Crosses Initialization” hiba bemutatására C++ nyelven:







#include
#include
névtér használata std;
void menu_display ( ) ;
int választási_menü ( ) ;
void get_two_operands ( int & n, int & m ) ;
int add ( int n, int m ) ;
int kivonni ( int n, int m ) ;


int fő ( )
{
int kiválasztás;

csináld
{
menü_megjelenítés ( ) ;
kiválasztás = választási_menü ( ) ;
int x, y;
kapcsoló ( kiválasztás )
{
ügy 1 :

get_two_operands ( x,y ) ;
int összeg = hozzá ( x, y ) ;
cout << x << '+' << és << ' = ' << összeg << endl;

szünet ;

ügy 2 :

get_two_operands ( x, y ) ;

int diff = kivonás ( x, y ) ;
cout << x << '-' << és << ' = ' << diff << endl;

szünet ;
alapértelmezett:;
}

} míg ( kiválasztás ! = 3 ) ;

cout << 'A program megszűnt' << endl;

Visszatérés 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'Alapvető számológép' << endl;
cout << ' 1. Add (+) ' << endl;
cout << ' 2. Kivonás (-) ' << endl;
cout << '3. Kilépés' << endl;

cout << endl;
}

int get_menu_choice ( )
{
int választás;
cout << 'Érvénytelen választás, próbálkozzon újra:' ;
enni >> kiválasztás;

míg ( ( ( kiválasztás < 1 ) || ( kiválasztás > 3 ) ) && ( ! cin.kudarc ( ) ) )
{
cout << ':' ;
enni >> kiválasztás;
}
ha ( cin.kudarc ( ) )
{
cout << 'Hiba' << endl;
kijárat ( 1 ) ;
}
Visszatérés kiválasztás;
}

void get_two_operands ( int & n, int & m )
{
cout << 'Adj két operandust' << endl;
cout << 'Első operandus:' ;
enni >> n;
cout << 'Második operandus:' ;
enni >> m;

}


int add ( int n, int m )
{
Visszatérés ( n + m ) ;
}

int kivonni ( int n, int m )
{
Visszatérés ( n - m ) ;
}


A program végrehajtásakor „Ugrás az esetcímkére” hibát ad vissza. Ez fordítási hiba.



Ez a hiba azért jelenik meg, mert a változót a case utasításon belül deklarálták a zárójelek nélkül. A tok csak egy címke, így nem képes korlátozni az alá írt paraméterek elérhetőségét. A fenti kód végrehajtásakor az 1. eset változóit a 2. eset elérheti, és az inicializálatlanként jelenik meg, ami hibákhoz vezet.







Hogyan javítsuk ki a „Jump to Case Label Crosses Initialization” hibát a C++ nyelven

Ez a hiba az esetblokkon belüli zárójelek használatával javítható, ami egy zárt hatókört hoz létre, és a különböző esetblokkok paraméterei nem lesznek manipulálva.

Hibakeresési kód

Ez a fenti hiba hibakereső kódja. A hibát úgy javítjuk ki, hogy az adatokat zárójelben lévő esetek közé helyezzük:



#include
#include
névtér használata std;
void menu_display ( ) ;
int választási_menü ( ) ;
void get_two_operands ( int & n, int & m ) ;
int add ( int n, int m ) ;
int kivonni ( int n, int m ) ;


int fő ( )
{
int kiválasztás;

csináld
{
menü_megjelenítés ( ) ;
kiválasztás = választási_menü ( ) ;
int x, y;
kapcsoló ( kiválasztás )
{
ügy 1 :
{
get_two_operands ( x,y ) ;
int összeg = hozzá ( x, y ) ;
cout << x << '+' << és << ' = ' << összeg << endl;
}
szünet ;
ügy 2 :
{
get_two_operands ( x,y ) ;
int diff = kivonás ( x,y ) ;
cout << x << '-' << és << ' = ' << diff << endl;
}
szünet ;
alapértelmezett:;
}

} míg ( kiválasztás ! = 3 ) ;

cout << 'A program megszűnt' << endl;

Visszatérés 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'Alapvető számológép' << endl;
cout << ' 1. Add (+) ' << endl;
cout << ' 2. Kivonás (-) ' << endl;
cout << '3. Kilépés' << endl;
cout << endl;
}

int választási_menü ( )
{
int kiválasztás;
cout << 'Válassza ki a műveletet:' ;
enni >> kiválasztás;

míg ( ( ( kiválasztás < 1 ) || ( kiválasztás > 3 ) ) && ( ! cin.fail ( ) ) )
{
cout << 'Érvénytelen választás, próbálkozzon újra:' ;
enni >> kiválasztás;
}
ha ( cin.fail ( ) )
{
cout << 'Hiba' << endl;
kijárat ( 1 ) ;
}
Visszatérés kiválasztás;
}

void get_two_operands ( int & n, int & m )
{
cout << 'Adj két operandust' << endl;
cout << 'Első operandus:' ;
enni >> n;
cout << 'Második operandus:' ;
enni >> m;

}


int add ( int n, int m )
{
Visszatérés ( n + m ) ;
}

int kivonni ( int n, int m )
{
Visszatérés ( n - m ) ;
}


A kód kis- és nagybetűs blokkjaiban a zárójelek használata után a hiba kijavításra került, és a kimenet megjelenik:

Következtetés

A switch utasítás a legjobb alternatíva a hosszú if-else-if utasításhoz, mivel csökkenti a kód hosszát és jobb áttekinthetőséget biztosít. A switch utasítás használata közben a C++ nyelvben egy gyakori fordítási hiba, amely megfigyelhető, a „Jump to Case Label Crosses Initialization”. Ez a hiba általában egy változó helytelen deklarációja miatt jelenik meg az esetcímkén belül. Ezt az esetblokkok alatt lévő adatok körüli zárójelek használatával lehet javítani.