Ausdruck muss einen konstanten Wert Fehler in C ++ haben [duplizieren]

8

Ich habe den folgenden Code:

%Vor%

Ich erhalte einen Fehler in der Zeile 'vec2 vPoints [myLines];' das besagt, dass Ausdrücke einen konstanten Wert haben müssen. Ich verstehe nicht, warum ich diesen Fehler bekomme, keine Hilfe?

Liegt das daran, dass myLines negativ sein könnte? idk.

    
y3di 20.09.2011, 15:51
quelle

5 Antworten

13
%Vor%

Da myLines kein const Ausdruck ist (was bedeutet, dass er zur Kompilierungszeit nicht bekannt ist), deklariert der obige Code ein Array variabler Länge, das in C ++ nicht erlaubt ist. Nur C99 hat diese Funktion, Ihr Compiler könnte dies als Erweiterung haben (aber das ist nicht Standard C ++).

Die Lösung für ein solches Commom-Problem ist: Verwenden Sie std::vector<T> als:

%Vor%

Es sollte jetzt funktionieren.

    
Nawaz 20.09.2011, 15:54
quelle
5

Liegt das daran, dass myLines negativ sein könnte?
Nein, das liegt daran, dass myLines keine Kompilierzeitkonstante ist.

Erläuterung:

%Vor%

Erstellt ein Array mit variabler Länge, wobei myLines value zur Laufzeit bestimmt wird. Arrays mit variabler Länge sind in C ++ nicht zulässig. Es war ein Feature, das in C99 eingeführt wurde, und C ++ Standard unterstützt es nicht. Einige C ++ - Compiler unterstützen es jedoch als Erweiterung, es entspricht jedoch nicht dem Standard.

Für C ++ sollte die Größe eines Arrays zur Kompilierzeit bekannt sein und daher muss die Kompilierzeit konstant sein. myLines ist keine Kompilierzeitkonstante und daher der Fehler.

Sie sollten einen std :: vector

verwenden     
Alok Save 20.09.2011 15:54
quelle
1
%Vor%

Die Array-Größe muss eine Kompilierzeitkonstante sein. myLines ist keine Kompilierzeitkonstante. Ordnen Sie den Speicher stattdessen mit neu oder noch besser mit std::vector zu.

    
Mahesh 20.09.2011 15:55
quelle
1

C ++ hat keine Arrays variabler Länge. Die Größe eines Arrays muss zur Kompilierzeit bestimmt werden. Der Wert von myLines ist nur zur Laufzeit bekannt, also wird dies nicht funktionieren.

Um Arrays zu verwenden, deren Größe nur zur Laufzeit bekannt ist, verwenden Sie std::vector .

%Vor%     
R. Martinho Fernandes 20.09.2011 15:55
quelle
1

Sie erhalten diesen Fehler, da statische Arrays eine statische (konstante) Größe benötigen. Da die Anzahl der Komponenten in vPoints dynamisch ist, sollten Sie stattdessen ein dynamisches Array verwenden. Oder besser noch bei vector bleiben.

    
K-ballo 20.09.2011 15:55
quelle

Tags und Links