static const Problem
-
Ich habe in einer Klasse ein paar static const attribute die ich an einer anderen Stelle in einem switch verwende. Jetzt sagt mir mein Visual Compiler aber dass der Ausdruck keine Konstante ist! (case-Ausdruck ist keine Konstante)
Ich dachte wenn ich etwas const mache sollte ich es schon in einem case Ausdruch verwenden können.
Was hält ihr davon?
-
Der Wert des Ausdruck 〈constant-expression 〉 (nach dem Schlüsselwort "case") muß zur Zeit der Übersetzung des Programmes feststehen (er muß „konstant“ sein). Es muß sich um einen ganzzahligen Wert (dazu zählt auch der Typ "bool") oder um einen Wert einen Aufzählungstyps handeln.
-
Auch static const Variablen stehen immer noch im Speicher, der Compiler brauch bei einem case aber einen direkten Wert mit dem er vergleichen kann.
Versuche das ganze doch mit einem #define zu lösen.
Gruß Mirauder_Mo
-
Mirauder_Mo schrieb:
Versuche das ganze doch mit einem #define zu lösen.
nee. enum ist weniger gemein.
template<class T> class RingBuffer { enum{SIZE=100};//statt static const int SIZE=100; T data[SIZE]; ... }
-
Das ist ein Compiler-Bug, oder? Eigentlich sollte doch nichts dagegen sprechen, const statics als case-Label zu nehmen.
-
Um ehrlich zu sein, wundert mich das auch, da ich das selber auch erfolgreich verwendet habe, bevor ich geistig weiter gereift bin und meine static const ints durch enums ersetzt habe.
-
static const ist schöner, oder? afair sagte bjarne dazu: ups, hab doch glatt vergessen, static const als compilezeitkonstant zu definieren. nu wurde es aber nachgeholt. nur kann der msvc60 das noch nicht.