Initialisierung
-
huhu leute,
laut meinem Skript reserviert der Compiler für lokale Variablen den Speicherplatz zur Laufzeit, wenn die Variable zur Laufzeit deklariert wird,
und die Initialisierung erfolgt auch zur Laufzeit.Demnach geht folgendes:
#include <iostream> using namespace std; int main() { char length=7; char array[length]; }Wenn ich das array aber nun Anfangsinit funktioniert es auf einmal nicht mehr
--> " variable-sized object `array' may not be initialized " kommt als Compilerfehler.#include <iostream> using namespace std; int main() { char length=7; char array[length]="test"; }Warum kommt dann hierbei dieser Fehler? ... Wenn der Compiler zur Deklaration des Arrays kommt dann ist doch length schon deklariert und initalisiert.
Steht in meinem Skript nun etwas falsches oder hab ich irgendwas falsch verstanden?
thx schonmal

-
Sowas geht AFAIK nur in C99. In C++ muss die Arraygrösse auf dem Stack eine Konstante sein...
-
Aber warum geht es dann im 1.Beispiel ... da is die größe auch keine Konstante

-
char array[length]="test";Hat zwar nichts mit dem Thema zu tun, aber weisst du was hier passiert?
-
Mal zu nem ordentlichen Compiler wechseln... Ich empfehle die Visual Studio 2008 IDE.
-
Was passiert den da @knivil^^
-
Er kann sich length sparen und char* benutzen.
-
Kramuri schrieb:
Mal zu nem ordentlichen Compiler wechseln... Ich empfehle die Visual Studio 2008 IDE.
Würde ich auch sagen. Laut C++-Standard muss die Grösse eines Arrays ein konstanter Ausdruck sein, also zur Compilezeit feststehen.
knivil schrieb:
Er kann sich length sparen und char* benutzen.
Nur, wenn er nachher nicht mehr schreibend zugreifen will. Und wenn schon, sollte er
const char*benutzen.
-
Nexus schrieb:
Würde ich auch sagen. Laut C++-Standard muss die Grösse eines Arrays ein konstanter Ausdruck sein, also zur Compilezeit feststehen.
void f(int const size) { char arr[size]; }
-
Was willst du damit sagen? Dass es gewisse Compiler gibt, die deinen Code akzeptieren? Oder dass "zur Compilezeit feststehen" etwas Spielraum für Interpretationen lässt?
-
Shade Of Mine schrieb:
void f(int const size) { char arr[size]; }error C2057: expected constant expression
-
Hmm...
D.h. dann wohl dass es eine globale Konstante sein muss, oder man muss es dynamisch erzeugen oda?
-
Dweb schrieb:
D.h. dann wohl dass es eine globale Konstante sein muss
Keine globale Konstante, ein konstanter Ausdruck. Dazu gehören:
- Literale
- Variablen, die
const-spezifiziert sind und mit einem konstanten Ausdruck initialisiert werden - Enumeratoren
- Templateparameter
sizeof-Ausdrücke
-
ahh k
... dass war ne klare aussage @nexus