Dieses Programm gibt mir einen erwarteten Ausdruckfehler in der Zeile, in der ich float x [size] [2] deklariere. Warum?
Das Array wird zur Kompilierzeit zugeordnet, und da %code% keine Konstante ist, kann der Compiler seinen Wert nicht genau bestimmen.
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 %code% anstelle von %code% 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 %code% zu vereinfachen, können Sie eine %code% Vorlage verwenden, die effektiv eine in-place Typdefinition ist (auch verfügbar in %code% )
%Vor%Wenn Sie möchten, können Sie auch einen Vektor von %code%
verwenden %Vor%Die Zeile %code% funktioniert nicht, da Arrays zur Kompilierzeit zugeordnet werden müssen (mit einigen wenigen Compiler-spezifischen Ausnahmen). Wenn Sie die Größe des Arrays %code% 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 %code% oder %code% zuweisen.
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.)
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.
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 %code% gekennzeichnet sind: Sie müssen in das Programm hartcodiert werden.
Verwenden Sie die dynamische Zuordnung oder %code% (ein Wrapper für die dynamische Array-Zuweisung), um die Array-Größen zur Laufzeit zu 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.
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.