const Array initialisieren
-
Hallo,
ich habe ein const unsigned short arr[5] als private Klassenattribut und möchte dieses gerne im Konstruktor initializieren. Sowohl in der Initialisierungsliste als auch im Body funktioniert es nicht. Wie lautet die korrekte Syntax?
Danke
-
Dafür braucht man C++11. Dann geht es, wie man intuitiv erwartet:
struct foo { const int bar[3]; foo(): bar{1,2,3} { } };
oder
struct foo { const int bar[3] = {1,2,3}; foo() {}; };
Ohne C++11: Tja. :p Man kann da eventuell drumrum hacken. Oder einen vector benutzen. Aber so wirklich gut ist nichts davon. Darum hat man da ja auch geändert
.
-
inititi schrieb:
Sowohl in der Initialisierungsliste als auch im Body funktioniert es nicht
Mal logisch überlegen.
Wenn du es im Body probierst, hängt der Wert vermutlich nicht von Parametern des Konstruktors ab (falls doch passt SeppJs Antwort).
Falls nicht: Wozu Klassenattribut? Machs als globales Array und es funktioniert prächtig
const int foo_bar[3] = {1,2,3};
-
Nicht-statische const-Member sind sowieso ganz allgemein (99.9%) unangebracht.
-
danke für die rasche Antwort
tjajjj schrieb:
Machs als globales Array und es funktioniert prächtig
const int foo_bar[3] = {1,2,3};
böse!!!
-
Hey,
ich versuche es mit C++11. Da bekomme ich aber auch einen Fehler:
const char* num2str_lut = "012"; //funktioniert const unsigned short str2num_lut[3] = {0,0,0}; //Fehler
error: cannot convert ‘<brace-enclosed initializer list>’ to ‘const short unsigned int’ in initialization
Warum?
-
also die Initializieren des char* kann ich direkt in der Klassendeklaration vornehmen, doch die Initialisierung des unsigned short Array funktioniert nur in der Initialisierungsliste des Konstruktors. Warum? Ist doch eigentlich das gleiche, oder?
-
Sollte eigentlich funktionieren. Bitte vollständiges Beispiel.
P.S.: Compiler und Version?
-
...
-
const unsigned short str2num_lut[3] = { };
Reicht in diesem Fall.