Prob mit Meldung
-
!Case bypasses initialization of al local variable
Könnt ihr mir sagen was er damit meint?
-
Revils schrieb:
!Case bypasses initialization of al local variable
Ein case überspringt die initialisierung einer lokalen variablen
-
Man muss den Block einklammern, wenn man Variablen nach einer case-Marke deklariert:
case 0: { int num = 0; break; }
-
Ey Leute...danke euch. Perfekt. Hat geklappt.
-
Wenn du unbedingt lokale Variablen innerhalb von
switch
möchtest, rät es sich, neue Blöcke zu erzeugen. Vergiss dasbreak
aber dennoch nicht. Zum Beispiel so, Formatierung ist ja egal:switch (Var) { case 1: { double d = 32.5476; d *= 54.7632 } break; case 2: { double d = 21.12; } break; }
Allerdings solltest du überlegen, ob sich bei lokalen Deklarationen nicht die Auslagerung in eine separate Funktion lohnt. Oft - nicht immer - gehen mit neuen Variablen auch einige Anweisungen einher, die den Code schnell aufblähen und die Funktion lang und unübersichtlich machen. Bei
switch
selbst kann man sich überlegen, ob nicht Alternativen wiestd::map
angebracht sind.
-
Für was steht das std::map? Ich muss sagen, ich habe noch nie mit map's gearbeitet.
-
std::map ist ein Klassen Template: http://www.cplusplus.com/reference/stl/map/
Edit: typo korrigiert
-
std ist ein namespace, map eine klasse.
-
Naja, statt
std::string Name; int Var = ...; switch (Var) { case 3: Name = "der dritte"; break; case 17: Name = "Nummer Siebzehn"; break; case 42: Name = "Die Antwort persönlich"; break; }
hast du dann sowas:
std::map<int, std::string> Map; Map[3] = "der dritte"; Map[17] = "Nummer Siebzehn"; Map[42] = "Die Antwort persönlich"; int Var = ...; std::string Name = Map[Var]; // Vorsicht, evtl. Eintrag hinzugefügt -> je nachdem find() besser
Vorteil ist, dass du nicht auf integrale Konstanten als Key-Typen beschränkt bist, sondern irgendwas verwenden kannst.