Πώς να διορθώσετε το σφάλμα 'Μετάβαση σε Case Label Crosses Initialization' στη C++

Pos Na Diorthosete To Sphalma Metabase Se Case Label Crosses Initialization Ste C



Η εντολή switch είναι η καλύτερη εναλλακτική για τη μεγάλη πρόταση if-else-if, καθώς μειώνει το μήκος του κώδικα και προσφέρει καλύτερη σαφήνεια. Η τιμή αξιολογείται χρησιμοποιώντας τη δήλωση switch και ελέγχεται σε σχέση με τις τιμές κάθε ετικέτας περίπτωσης. Εάν βρεθεί η αντιστοίχιση, ο κώδικας εκτελείται πριν από το διάλειμμα, διαφορετικά, εκτελεί τον κώδικα μετά την 'προεπιλογή'.

Τι προκαλεί το σφάλμα 'Μετάβαση σε Case Label Crosses Initialization' στη C++

Κατά τη χρήση της δήλωσης διακόπτη, στη C++ ένα συνηθισμένο σφάλμα που μπορεί να παρατηρηθεί είναι το «Μετάβαση σε Εκκίνηση Διασταυρώσεων Ετικέτας Περίπτωσης». Αυτό το σφάλμα εμφανίζεται συνήθως λόγω της εσφαλμένης δήλωσης μιας μεταβλητής μέσα στην ετικέτα πεζών-κεφαλαίων. Ακολουθεί ένα παράδειγμα προγράμματος για την επίδειξη του Σφάλματος 'Μετάβαση σε Case Label Crosses Initialization' στη C++:







#include
#include
χρησιμοποιώντας namespace std?
void menu_display ( ) ;
int επιλογή_μενού ( ) ;
void get_two_operands ( ενθ & n, int & Μ ) ;
int add ( int n, int m ) ;
int αφαιρώ ( int n, int m ) ;


int main ( )
{
int επιλογή?

κάνω
{
menu_display ( ) ;
επιλογή = επιλογή_μενού ( ) ;
int x, y;
διακόπτης ( επιλογή )
{
υπόθεση 1 :

get_two_operands ( x,y ) ;
ενθ άθροισμα = προσθέτω ( x, y ) ;
cout << Χ << '+' << και << ' = ' << άθροισμα << endl;

Διακοπή ;

υπόθεση 2 :

get_two_operands ( x,y ) ;

ενθ διαφ = αφαιρώ ( x, y ) ;
cout << Χ << '-' << και << ' = ' << διαφ << endl;

Διακοπή ;
Προκαθορισμένο:;
}

} ενώ ( επιλογή ! = 3 ) ;

cout << 'Το πρόγραμμα τερματίστηκε' << endl;

ΕΠΙΣΤΡΟΦΗ 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'Βασική αριθμομηχανή' << endl;
cout << ' 1. Προσθήκη (+)' << endl;
cout << '2. Αφαίρεση (-)' << endl;
cout << '3. Έξοδος' << endl;

cout << endl;
}

int get_menu_choice ( )
{
int επιλογή?
cout << 'Μη έγκυρη επιλογή Δοκιμάστε ξανά:' ;
τρώει >> επιλογή;

ενώ ( ( ( επιλογή < 1 ) || ( επιλογή > 3 ) ) && ( ! cin.αποτυχία ( ) ) )
{
cout << ':' ;
τρώει >> επιλογή;
}
αν ( cin.αποτυχία ( ) )
{
cout << 'Λάθος ' << endl;
έξοδος ( 1 ) ;
}
ΕΠΙΣΤΡΟΦΗ επιλογή;
}

void get_two_operands ( ενθ & n, int & Μ )
{
cout << 'Δώστε δύο τελεστές' << endl;
cout << 'Πρώτος χειριστής:' ;
τρώει >> n;
cout << 'Δεύτερος τελεστής:' ;
τρώει >> Μ;

}


int add ( int n, int m )
{
ΕΠΙΣΤΡΟΦΗ ( n + m ) ;
}

int αφαιρώ ( int n, int m )
{
ΕΠΙΣΤΡΟΦΗ ( n - m ) ;
}


Όταν εκτελείται αυτό το πρόγραμμα, επιστρέφει ένα σφάλμα «Μετάβαση στην ετικέτα πεζών». Αυτό είναι ένα σφάλμα μεταγλώττισης.



Αυτό το σφάλμα εμφανίζεται λόγω της δήλωσης της μεταβλητής μέσα σε μια δήλωση case χωρίς τις αγκύλες. Η θήκη είναι απλώς μια ετικέτα, επομένως δεν έχει τη δυνατότητα να περιορίσει τη διαθεσιμότητα των παραμέτρων που αναγράφονται κάτω από αυτήν. Όταν εκτελεστεί ο παραπάνω κώδικας, οι μεταβλητές της περίπτωσης 1 μπορούν να προσπελαστούν από την περίπτωση 2 και θα εμφανιστούν ως μη αρχικοποιημένοι οδηγώντας σε σφάλματα.







Πώς να διορθώσετε το σφάλμα 'Μετάβαση σε Case Label Crosses Initialization' στη C++

Αυτό το σφάλμα μπορεί να διορθωθεί χρησιμοποιώντας αγκύλες μέσα στο μπλοκ υπόθεσης, το οποίο θα δημιουργήσει ένα κλειστό πεδίο και οι παράμετροι των διαφορετικών μπλοκ περιπτώσεων δεν θα τροποποιηθούν.

Κωδικός εντοπισμού σφαλμάτων

Αυτός είναι ο κωδικός εντοπισμού σφαλμάτων για το παραπάνω σφάλμα. Το σφάλμα διορθώνεται περικλείοντας τα δεδομένα στις περιπτώσεις εντός των παρενθέσεων:



#include
#include
χρησιμοποιώντας namespace std?
void menu_display ( ) ;
int επιλογή_μενού ( ) ;
void get_two_operands ( ενθ & n, int & Μ ) ;
int add ( int n, int m ) ;
int αφαιρώ ( int n, int m ) ;


int main ( )
{
int επιλογή?

κάνω
{
menu_display ( ) ;
επιλογή = επιλογή_μενού ( ) ;
int x, y;
διακόπτης ( επιλογή )
{
υπόθεση 1 :
{
get_two_operands ( x,y ) ;
ενθ άθροισμα = προσθέτω ( x,y ) ;
cout << Χ << '+' << και << ' = ' << άθροισμα << endl;
}
Διακοπή ;
υπόθεση 2 :
{
get_two_operands ( x,y ) ;
ενθ διαφ = αφαιρώ ( x, y ) ;
cout << Χ << '-' << και << ' = ' << διαφ << endl;
}
Διακοπή ;
Προκαθορισμένο:;
}

} ενώ ( επιλογή ! = 3 ) ;

cout << 'Το πρόγραμμα τερματίστηκε' << endl;

ΕΠΙΣΤΡΟΦΗ 0 ;
}


void menu_display ( )
{
cout << endl;
cout << 'Βασική αριθμομηχανή' << endl;
cout << ' 1. Προσθήκη (+)' << endl;
cout << '2. Αφαίρεση (-)' << endl;
cout << '3. Έξοδος' << endl;
cout << endl;
}

int επιλογή_μενού ( )
{
int επιλογή?
cout << 'Επιλέξτε τη λειτουργία:' ;
τρώει >> επιλογή;

ενώ ( ( ( επιλογή < 1 ) || ( επιλογή > 3 ) ) && ( ! cin.αποτυχία ( ) ) )
{
cout << 'Μη έγκυρη επιλογή Δοκιμάστε ξανά:' ;
τρώει >> επιλογή;
}
αν ( cin.αποτυχία ( ) )
{
cout << 'Λάθος' << endl;
έξοδος ( 1 ) ;
}
ΕΠΙΣΤΡΟΦΗ επιλογή;
}

void get_two_operands ( ενθ & n, int & Μ )
{
cout << 'Δώστε δύο τελεστές' << endl;
cout << 'Πρώτος χειριστής:' ;
τρώει >> n;
cout << 'Δεύτερος τελεστής:' ;
τρώει >> Μ;

}


int add ( int n, int m )
{
ΕΠΙΣΤΡΟΦΗ ( n + m ) ;
}

int αφαιρώ ( int n, int m )
{
ΕΠΙΣΤΡΟΦΗ ( n - m ) ;
}


Μετά τη χρήση αγκύλων στα μπλοκ πεζών του κώδικα, το σφάλμα διορθώθηκε και εμφανίζεται η έξοδος:

συμπέρασμα

Η εντολή switch είναι η καλύτερη εναλλακτική για τη μεγάλη πρόταση if-else-if, καθώς μειώνει το μήκος του κώδικα και προσφέρει καλύτερη σαφήνεια. Κατά τη χρήση της δήλωσης διακόπτη, στη C++ ένα συνηθισμένο σφάλμα μεταγλώττισης που μπορεί να παρατηρηθεί είναι το «Μετάβαση σε Εκκίνηση Διασταυρώσεων Ετικέτας Περίπτωσης». Αυτό το σφάλμα εμφανίζεται συνήθως λόγω της εσφαλμένης δήλωσης μιας μεταβλητής μέσα στην ετικέτα πεζών-κεφαλαίων. Αυτό μπορεί να διορθωθεί χρησιμοποιώντας αγκύλες γύρω από τα δεδομένα κάτω από τα μπλοκ υπόθεσης.