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
)
Wenn Sie möchten, können Sie auch einen Vektor von std::pair<float, float>
Das Array wird zur Kompilierzeit zugeordnet, und da size
keine Konstante ist, kann der Compiler seinen Wert nicht genau bestimmen.
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.
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:
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.
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.
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.)
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.
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.
Tags und Links arrays c++ constant-expression