constant-expression

___ qstntxt ___
%Vor%

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

    
___ qstnhdr ___ C ++ erwarteter konstanter Ausdruck ___ answer2448389 ___

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

    
___ answer2448431 ___
%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 %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%     
___ answer2448421 ___

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.

    
___ answer2448491 ___

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.)

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer2448404 ___

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.

    
___ tag123arrays ___ Ein Array ist eine geordnete Datenstruktur, die aus einer Sammlung von Elementen (Werten oder Variablen) besteht, die jeweils durch einen oder mehrere Indizes identifiziert werden. Wenn Sie nach bestimmten Varianten von Arrays fragen, verwenden Sie stattdessen diese verwandten Tags: [Vektor], [Arraylist], [Matrix]. Wenn Sie dieses Tag verwenden, markieren Sie die Frage auch mit der verwendeten Programmiersprache, es sei denn, Ihre Frage bezieht sich nicht auf eine bestimmte Programmiersprache. ___ answer4580989 ___

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.

    
___ answer2448393 ___

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.

    
___ tag123constantexpress ___ Konstante Ausdrücke können zur Kompilierzeit ausgewertet werden. ___ answer2448428 ___

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.

    
___
2
Antworten

Was ist ein konstanter Ausdruck in C?

C definiert mindestens 3 Ebenen des "konstanten Ausdrucks": konstanter Ausdruck (unqualifiziert) arithmetischer Konstantenausdruck Integer-Konstantenausdruck 6.6 Absatz 3 lautet:    Konstante Ausdrücke dürfen keine Zuweisung, Inkre...
04.02.2011, 00:11
6
Antworten

Beispiel für etwas, das ein "konstanter Ausdruck" in C ist und nicht ist?

Ich bin ein bisschen verwirrt zwischen dem, was ein konstanter Ausdruck in C ist und nicht ist, selbst nach viel Googleing. Könntest du ein Beispiel für etwas geben, das ein konstanter Ausdruck in C ist und was nicht?     
20.09.2010, 21:08
8
Antworten

C ++ erwarteter konstanter Ausdruck

%Vor% Dieses Programm gibt mir einen erwarteten Ausdruckfehler in der Zeile, in der ich float x [size] [2] deklariere. Warum?     
15.03.2010, 15:41