C ++ erwarteter konstanter Ausdruck

7
%Vor%

Dieses Programm gibt mir einen erwarteten Ausdruckfehler in der Zeile, in der ich float x [size] [2] deklariere. Warum?

    
n0ob 15.03.2010, 15:41
quelle

8 Antworten

11
%Vor%

Das funktioniert nicht, da deklarierte Arrays keine Laufzeitgrößen haben können. Probieren Sie einen Vektor aus:

%Vor%

Oder verwenden Sie new

%Vor%

Wenn C ++ 11 nicht verfügbar ist, können Sie boost::array anstelle von std::array verwenden.

Wenn Sie keinen Boost zur Verfügung haben, erstellen Sie Ihren eigenen Array-Typ, den Sie in den Vektor stecken können

%Vor%

Um die Syntax von new zu vereinfachen, können Sie eine identity Vorlage verwenden, die effektiv eine in-place Typdefinition ist (auch verfügbar in boost )

%Vor%

Wenn Sie möchten, können Sie auch einen Vektor von std::pair<float, float>

verwenden %Vor%     
Johannes Schaub - litb 15.03.2010, 15:47
quelle
8

Das Array wird zur Kompilierzeit zugeordnet, und da size keine Konstante ist, kann der Compiler seinen Wert nicht genau bestimmen.

    
Justin Ethier 15.03.2010 15:43
quelle
4

Sie können in C ++ keine Arrays variabler Länge (wie sie in C99 genannt werden) haben. Sie müssen dynamisch zugewiesene Arrays verwenden (wenn die Größe variiert) oder einen statischen Integralkonstantenausdruck für die Größe verwenden.

    
dirkgently 15.03.2010 15:44
quelle
2

Die Zeile float x[size][2] funktioniert nicht, da Arrays zur Kompilierzeit zugeordnet werden müssen (mit einigen wenigen Compiler-spezifischen Ausnahmen). Wenn Sie die Größe des Arrays x bei compile Zeit einfach ändern können, können Sie dies tun:

%Vor%

Wenn Sie das Array basierend auf Informationen, die Sie nur zur Laufzeit haben, wirklich zuweisen möchten, müssen Sie das Array dynamisch mit malloc oder new zuweisen.

    
JSBձոգչ 15.03.2010 15:46
quelle
1

Es ist eine Einschränkung der Sprache. Array-Größen müssen konstante Ausdrücke sein. Hier ist eine Teilübersetzung von cplusplus.com

  

HINWEIS: Das Elementfeld in Klammern [], das die Anzahl der Elemente angibt, die das Array enthalten soll, muss ein konstanter Wert sein, da Arrays Blöcke nichtdynamischen Speichers sind, deren Größe vor der Ausführung festgelegt werden muss. Um Arrays mit variabler Länge zu erstellen, wird dynamischer Speicher benötigt, der später in diesen Tutorials erklärt wird.

    
JaredPar 15.03.2010 15:45
quelle
1

Die Größe eines automatischen Arrays muss eine Kompilierzeitkonstante sein.

%Vor%

Wenn die Größe zum Zeitpunkt der Kompilierung nicht bekannt war (z. B. vom Benutzer eingegeben, ermittelt aus dem Inhalt der Datei), müssen Sie die dynamische Zuordnung verwenden, zum Beispiel:

%Vor%

(Anstelle eines Paares würde eine dedizierte Point-Struktur / Klasse vollkommen Sinn machen.)

    
UncleBens 15.03.2010 15:55
quelle
1

Weil es einen konstanten Ausdruck erwartet!

Array-Dimensionen in C (Ignorieren von C99-VLAs) und C ++ müssen zur Kompilierungszeit bekannte Größen sein. Das bedeutet nicht nur, dass sie mit const gekennzeichnet sind: Sie müssen in das Programm hartcodiert werden.

Verwenden Sie die dynamische Zuordnung oder std::vector (ein Wrapper für die dynamische Array-Zuweisung), um die Array-Größen zur Laufzeit zu bestimmen.

    
quelle
1

Sie haben der Größe keinen Wert zugewiesen; Daher kann der Compiler den Speicher für das Array nicht zuordnen. (Ein Array von null Größe? Was?)

Außerdem müssten SIZE eine Konstante und keine Variable sein.

BEARBEITEN: Diese Antwort macht leider keinen Sinn mehr, da das Poster seine Frage geändert hat.

    
mszaro 15.03.2010 15:47
quelle

Tags und Links