Mehrere Initialisierungen in for-Schleife



  • Hallo,

    seit kurzem beschäftige ich mich mit C++ und habe eine Verständnisfrage zu folgender for-Schleife, die ich in einer Übungsaufgabe zum C++ Primer geschrieben habe:

    23	for(vector<string>::iterator i = svec.begin(), int j = 0; i != svec.end(); ++i, ++j)	{
    24		cout << *i << " ";
    25		if (j == 7)	{
    26			cout << endl;
    27			j = -1;
    28		}
    29	}
    

    Komischerweise meckert der Compiler (MSVC++ 2008 Express) und gibt folgende Fehlermeldungen aus:
    `1>.\main.cpp(23) : error C2062: 'int'-Typ unerwartet

    1>.\main.cpp(23) : error C2065: 'j': nichtdeklarierter Bezeichner

    1>.\main.cpp(23) : error C2143: Syntaxfehler: Es fehlt ';' vor ')'

    1>.\main.cpp(23) : error C2143: Syntaxfehler: Es fehlt ';' vor ')'

    1>.\main.cpp(23) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'

    1>.\main.cpp(25) : error C2065: 'j': nichtdeklarierter Bezeichner

    1>.\main.cpp(27) : error C2065: 'j': nichtdeklarierter Bezeichner`

    Wenn ich die Definition von j vor die Schleife schreibe, funktioniert alles:

    int j = 0;
    	for(vector<string>::iterator i = svec.begin(); i != svec.end(); ++i, ++j)	{
    		cout << *i << " ";
    		if (j == 7)	{
    			cout << endl;
    			j = -1;
    		}
    	}
    

    Warum funktioniert es mit der Definition innerhalb des Schleifenkopfes nicht?

    MfG,
    ScRaT



  • Die Variablen müssen vom gleichen Typ sein, wenn du sie in der Parameterliste initialisieren möchtest.



  • Danke, jetzt fiel es mir wie Schuppen von den Augen! 🙂

    Ist ja auch logisch, denn so wie ich das gemacht habe funktioniert es ja auch außerhalb von Schleifenköpfen nicht.
    Mit einer Modulo-Operation hätte ich mir die Variable j auch sparen können.

    Wahrscheinlich kommt es relativ häufig vor, dass man für eine Schleife mehr als eine Variable initialisieren/definieren muss. Wenn ja, gibt es da elegantere Möglichkeiten um sich z.B. keine Gedanken um den Geltungsbereich machen zu müssen?

    MfG,
    ScRaT



  • Jo, kannst es ja wie in deinem zweitem Code machen. So, gute Nacht! :xmas2: :xmas1:



  • ScRaT_GER schrieb:

    Wahrscheinlich kommt es relativ häufig vor, dass man für eine Schleife mehr als eine Variable initialisieren/definieren muss. Wenn ja, gibt es da elegantere Möglichkeiten um sich z.B. keine Gedanken um den Geltungsbereich machen zu müssen?

    Üblicherweise werden die Scopes so gering gehalten, dass es da keine Probleme mit Mehrdeutigkeiten gibt.


Anmelden zum Antworten