name lookup of `j' changed for new ISO `for' scoping



  • hallo
    versuche mich grad am galgenraten spiel. dabei erhalte ich die im topictitel angegebene fehlermeldung
    in zeile 10. wie kann ichd as vermeiden?

    for(int i=0;i==15;i++)
        {
                system("cls");
                cin>>buchstabe[i];
    
                if(buchstabe[i]=5)
                {
                    for(int j=15-i;j==15;j++);
                    {                    
                            delete buchstabe[j];
                    }
    
                }            
        }
    

    mfg



  • Nimm das _verdammte_ ';' aus der for Schleife. 😉

    Eigentlich laut Standard hinter dem ; das 'j' nicht mehr gültig.
    Aber der Visual C++ lässt es noch gelten, mit Warnung.
    Du kannst es in den Optionen umschalten, dass es richtig als Fehler anerkannt wird.



  • wie muss ich es denn stattdessen machen?



  • aron05 schrieb:

    wie muss ich es denn stattdessen machen?

    for(int j=15-i;j==15;j++); // <---- das ; muss weg
    


  • aron05 schrieb:

    for(int i=0;i==15;i++)
        {
                system("cls");
                cin>>buchstabe[i];
                
                if(buchstabe[i]=5)
                {
                    for(int j=15-i;j==15;j++);
                    {                    
                            delete buchstabe[j];
                    }
                    
                }            
        }
    

    Der Code lässt sich deutlich verkürzen:

    ;
    

    Schau bitte nochmal in deinem Lieblings-C++-Einsteigerbuch nach, wie for-Schleifen funktionieren.



  • Einfach das ";" hinter der schließenden Klammer der zweiten for-Schleife weglassen. Das hast Du doch bei der ersten Schleife auch nicht gemacht.

    Die for-Schleife ist afaik nur bis zu dem ";" gültig, d.h. läuft erst alle Werte für "j" durch und führt erst dann den nachfolgenden Block aus, aber Du möchtest ja, dass er Block für alle "j" ausgeführt wird.

    // Edit: Immer diese Überschneidungen. 😃



  • Schaut doch bitte erstmal auf die Bedingung der äußeren for-Schleife, bevor ihr weiter über das Semikolon redet.



  • HumeSikkins schrieb:

    Schaut doch bitte erstmal auf die Bedingung der äußeren for-Schleife, bevor ihr weiter über das Semikolon redet.

    Aber das war nicht die Frage 😛



  • Genau.
    Erst wird die Syntax korrigiert, dann die logischen Fehler 😉



  • 1. War das nicht die Frage
    2. habe ich mir den Code gar nicht weiter angeguckt, das ";" springt einem so ins Auge, da wird es schwierig weiter zu gucken. 😃

    Aber Du hast natürlich völlig Recht. 🤡



  • Wieso eigentlich

    delete buchstabe[j];
    

    ? Ist buchstabe ein char-Zeiger-Feld, und steht irgendwo etwas in der Art

    buchstabe[x] = new char;
    

    ?



  • danke für eure antworten
    das mit dem ";" war nur flüchtigkeitsfehler, mache ich sonst nicht.. und aus der fehlermeldung ging das für mich nicht ganz hervor 😉

    naja vllt habe ich mich mit galgenraten doch noch etwas übernommen für den 3. tag c++ :(( muss mich wohl erstmal durch zeiger durcharbeiten

    ganz kurze frage noch. gibt es eine "cin" alternative bei der kein zeilensprung folgt?

    mfg aron05


Anmelden zum Antworten