Der angegebene Code (Modulo Formatierung)
struct C
{
int const x = 2;
int y = 2;
};
& hellip sein muss; bedeutet dies:
struct C
{
int const x;
int y;
C(): x(2), y(2) {}
};
& hellip; d.h. die Mitglieder werden von jedem Konstruktor initialisiert.
Sie können sogar, dass die Initialisierung in einem benutzerdefinierten Konstruktor überschreiben:
struct S
{
int const x = 2;
S(): x(3) {}
};
Hier in jedem Fall x
3.
sein wird und so x
ist keine Kompilierung konstant. Es ist sehr viel eine Laufzeitsache. Und als solches kann es nicht als case
Label in einem switch
verwendet werden, weil ein case
Label ein Wert sein muss, der zur Kompilierzeit bekannt ist. Da das switch
-Konstrukt dafür entworfen wurde, effizient als einfache Array-Indizierung (ein berechneter Sprung) implementiert zu werden, wenn der Wertebereich dies zulässt.
Eine einfache Lösung besteht darin, den relevanten Wert als Kompilierzeitkonstante zu definieren. Entweder als static
oder enum
Wert innerhalb der Klasse. Oder außerhalb der Klasse.
Eine weitere mögliche Lösung ist es, einen if
zu verwenden - else
Leiter anstelle ein switch
.
Versuchen Sie, C :: X als statischen consExpr zu deklarieren. Und dann benutze C :: X in dem Fall anstelle von x-> X – DarthRubik
Sie können nicht 'x-> X' als Fall für den Schalter verwenden. – Nacho
@DarthRubik Ich möchte keine statischen Variablen, wenn es nicht wirklich notwendig ist. – mak