Fehler: Case bypasses initialisation of a local varialbe in funktion main()



  • Hallo zusammen,

    ich bin so langsam echt am verzweifeln und hoff hier kann mir jemand weiter helfen.
    Ich muss ein Kursverwaltung fürs Studium schreiben.Soweit steht sie auch schon. allerdings bringt mir mein Compiler immer weinen fehler in einer einer Zeile (case 2 vom unten stehenden Code). Wenn ich den case 2 lösche wandert der Fehler zu case 3 ... Ich hab jetzt schon diverse Beiträge in verschiedenen Foren gelesen allerdings hatt mir das bisher nichts gebracht. Darum jetzt meine Frage an euch:
    Kann von euch irgendjemand hier den Fehler entdecken und mir sagen wie ich ihn behebe?
    Vielen Dank schonmal!

    //Menue
    
    #include "Header.h"
    #include <ctype.h>
    using namespace std;
    
    // Auswahlmenue für die Seminar Liste
    
    int main(){
    
    Test T1;					//erstellen eines Test Objektes
    
    int eingabe=0;
    
    while (eingabe!=8){
    	T1.Menue();				//Aufruf Menue und Eingabeaufforderung
    	cin  >> eingabe;
    
        if (!cin.good()) {
    		cin.clear();
            cin.sync(); 		//Puffer der Tastatureingabe leeren
        }
    
    	switch(eingabe){
    
    	  case '1':				// Seminare anzeigen
    	  		system("cls");
    	  		int auswahl = 0;
    
    	  		cout << "Bitte wählen sie Teilnehmer(1) oder Seminar(2) anlegen\n" << endl;
    	  		cin >> auswahl;
    
    	  		if (auswahl == 1){
    	  			cout << "Gewaehlte Option: Seminare anzeigen\n" <<endl;
    		    	T1.ZeigeSeminar();
    		    	T1.Auswahl();
    			}
    
    		    if (auswahl == 2){
    		    	cout <<"Gewaehlte Option: Teilnehmere anzeigen\n" <<endl;
    				T1.ZeigeTeilnehmer();
    				T1.Auswahl();
    			}
    
    			else{
    				cout << "Falsche Eingabe!" << endl;
    			}
    
    		    break;
    
          case '2':		// Anzahl Elemente
          		system("cls");
    		    cout <<"Gewaehlte Option: Anzahl der Eintraege in der Liste ausgeben\n" <<endl;
    	        cout << " Die Liste enthaelt " <<  T1.Anzahl() << " Elemente\n" << endl;
    		    T1.Auswahl();
    		    break;
    
    	  case '3':				// Seminar bestimmen
    	  		system("cls");
    
    	  		cout << "Bitte wählen sie Teilnehmer(1) oder Seminar(2) bestimmen\n" << endl;
    	  		cin >> auswahl;
    
    	  		if (auswahl == 1){
    			    cout <<"Gewaehlte Option: Ein Seminar bestimmen\n" <<endl;
    			    T1.SeminarBestimmen();
    			    T1.Auswahl();
    			}
    
    		    if (auswahl == 2){
    			    cout <<"Gewaehlte Option: Ein Teilnehmer bestimmen\n" <<endl;
    			    T1.TeilnehmerBestimmen();
    			    T1.Auswahl();
    			}
    
    			else{
    				cout << "Falsche Eingabe!" << endl;
    			}
    
    		    break;
    
    	default:
    		  cout << "Fehler: Anwendungsfehler!\n\nBitte Funktion waehlen!\n\n" << endl;
    	}
    }
    return 0;
    }
    

    Ich hab die Cases 4-8 gelöscht, da ich denke sie sind unrelevant... wenn nicht bitte melden!

    schöne Grüße
    Nina


  • Mod

    Fehlermeldungen lesen und verstehen 😉 . Freie Übersetuzung durch mich:

    Case übergeht die Initialisierung einer lokalen Variable.

    Switch-Case springt (wie dir wohl bewusst ist) in einem Programm herum. Du darfst aber nicht an der Initialisierung von Variablen vorbeispringen in Bereiche wo diese Variablen trotzdem gültig sind. Doch genau das machst du bei dem int auswahl. auswahl wird im Case 1 initialisiert, ist aber, aufgrund deiner Klammerung, auch nachher noch gültig. Du benutzt auswahl zwar nicht mehr, aber passenden Code kann der Compiler trotzdem nicht erstellen.

    Falls du willst, dass auswahl im gesamten switch-case Konstrukt gültig ist, setz die Initialisierung vor das switch. Wenn du willst, dass auswahl nur lokal in Case 1 existiert, dann mach auswahl auch lokal für den Case 1, indem du den Gültigkeitsbereich einschränkst (geschweifte Klammern markieren Anfang und Ende von Gültigkeitsbereichen).

    edit: Ahh, ich sehe du verwendest auswahl auch in anderen Cases (Tut mir leid, dann Programm ist sauschlecht zu lesen, so wie du es hier gepostet hast 👎 . Verwende beim nächsten mal die cpp-Tags.). Wenn ich das jedoch richtig sehe, ist jedes mal eine andere Variable gemeint, die du bloß aus Faulheit mehrmals verwendest. Somit wäre die Variante mit der Einschränkung des Gültigkeitsbereiches die saubere Lösung. Die andere Variante wäre die faule Pfuscherlösung.


Anmelden zum Antworten