switch und lokale Variablen
-
Ich möchte zur Laufzeit eine Reihe von Buffern in einem switch Kontext erzeugen,
bekomme aber, wenn ich dies tue, die Meldung, dass die Initialisierung durch die case Marke übersprungen wird.Wie gehe ich mit diesem Problem um?
Ps. Merkwürdigerweise sind die über den new operator erzuegten char* buffer nicht stabil.
-
machst du sowas:
switch (foo){ case XXX: T * bar; ... case ... ... }Dann mach daraus ein:
switch (foo){ case XXX: { T * bar; ... } case ... ... }
-
switch( xyz ) { case AHA: { int myLocalVar = 1234; break; } }meinst du sowas?
-
ehm ganz einfach... du hast die {} vergessen

void show_data(std::size_t id) { switch (id) { case 32: { int val = 64; std::cout << val << std::endl; } break; } }...
-
Hmm, bin ein bisschen ratlos:
Hier bekomme ich die Meldung:
Initialisierung von 'buffer' durch 'case'-Marke übersprungenswitch(id) { case 1: ... break; case 6: char* buffer = new char[128]; break; case 7: ... break; }Hintergrund, warum ich den new Operator benutzen will, ist, dass sich die Größe des Buffers von Mal zu Mal ändern kann.
-
buffer ist im gesamten switch()-Block nach seiner Definition gültig, also auch im "case 7"-Zweig. Allerdings überspringst du bei id==7 die Initialisierung, so daß dort der Zeiger nicht initialisiert wird. Um die Gültigkeit einzuschränken, mußt du einen inneren Hilfblock öffnen:
switch(id) { case 1: ... break; case 6: { char* buffer = new char[128]; ... break; } case 7: ... break; }(wenn der Pointer das Ende des switch() überleben soll, solltest du ihn vorher anlegen)
-
ja, genau das ist der Punkt: Ich möchte die Gültigkeit auf case 6 einschränken.
Wie mache ich das?
-
Percy2000 schrieb:
ja, genau das ist der Punkt: Ich möchte die Gültigkeit auf case 6 einschränken.
Wie mache ich das?Indem Du liest was Dir schon viermal vorgeschlagen wurde?

-
CSToll, herzlichen Dank
-
Percy2000 schrieb:
der Compiler akzepteiert eine lokale Variable (wie viermal vorgeschlagen),
aber er akzeptiert keine Erzeugung über den new operator.Dann hast Du diese Initialisierung nicht in einen Hilfsblock gefasst - was uns wieder zur letzten Antwort führt.
Wenn Du meinst es korrekt geändert zu haben, und es immernoch nicht funktioniert, musst Du nochmal den (geänderten) Code zeigen.
EDIT: Hast es wohl doch noch gesehen
