switch-case-Anweisung für nicht konstante Elemente
-
Hallo,
ich versuche gerade eine switch-Anweisung zu schreiben, allerdings meckert er, dass in den Cases kein konstanter Ausdruck steht. Schaut bei mir so aus:
switch (box1.maxDim(), space.maxDim()) { case (box1.Length, space.Length): temp.Length = box1.Length; break; case (box1.Length, space.Width): temp.Width = box1.Length; break; case (box1.Length, space.Height): temp.Height = box1.Length; break; case (box1.Width, space.Length): temp.Length = box1.Width; break; case (box1.Width, space.Width): temp.Width = box1.Width; break; case (box1.Width, space.Height): temp.Height = box1.Width; break; case (box1.Height, space.Length): temp.Length = box1.Height; break; case (box1.Height, space.Width): temp.Width = box1.Height; break; case (box1.Height, space.Height): temp.Height = box1.Height; break; }
Ich kann die Werte aber nicht generell als konstant definieren, weil ich sie manchmal ändern muss. Habe gelesen dass es const_cast gibt, womit ich die auf konstant casten kann. Bin mir aber irgendwie nicht so sicher wie das gehen soll.
Vielen Dank für eure Hilfe,
lg,
Chrissi
-
Hallo,
wie dir die Fehermeldung sagt, funktioniert switch nur fuer einen Parameter:
int wahl; //tue was mit wahl switch(wahl) { case fall_1: //foo break; case fall_2: //bar break; default: //nicht fall_1, nicht fall_2, dann tue was anderes }
mfg
v R
-
CChrissi schrieb:
Hallo,
ich versuche gerade eine switch-Anweisung zu schreiben, allerdings meckert er, dass in den Cases kein konstanter Ausdruck steht. Schaut bei mir so aus:
switch (box1.maxDim(), space.maxDim()) { case (box1.Length, space.Length):
Es gibt in C++ keine Tupel-Typen. Du erwartest wahrscheinlich dass (a,b) ein Paar aus a und b ergibt. Ist aber nicht so. Schau dir mal im C++-Buch deiner Wahl der Komma-Operator an.
Ich kann die Werte aber nicht generell als konstant definieren, weil ich sie manchmal ändern muss. Habe gelesen dass es const_cast gibt, womit ich die auf konstant casten kann. Bin mir aber irgendwie nicht so sicher wie das gehen soll.
Mit "konstanter Ausdruck" ist in diesem Fall ein zur Compilezeit bekannter Ausdruck ('compile time constant') gemeint. Sowas kann man nicht durch const_cast oder sonstwie nachbauen. Vergiss switch also.
-
ah ok... danke... wär ja auch zu schoen gewesen, wenn das funktioniert haette
Hat jemand eine Anregung wie man so etwas realisieren könnte ohne sich in if-else Schleifen zu verschachteln ?
lg,
CHrissi