Frage

Ich habe an einem Programm in Netbeans unter Linux mit einem GCC -Compiler an einem Programm gearbeitet, als der Code beim Wechsel zu Visual C ++ unter Windows 7 nicht als Visual C ++ kompiliert wurde expected constant expression auf mehreren Zeilen. Auf NetBeans habe ich einfach etwas Ähnliches gemacht wie char name[fullName.size()];, Während visueller C ++, versuchte ich unter anderem,

const int position = fullName.size();
char Name[position];

Wie kann ich eine Konstante für das Array erstellen?

Hinweis: Ich weiß von diese Frage, Aber gibt es eine Möglichkeit, dies zu arbeiten, ohne Vektoren zu verwenden, da dies einen Umschreiber aus vielen Teilen des Programms erfordern würde?

War es hilfreich?

Lösung

In VC ++ können Sie keine Laufzeit -Deklarationen von Stack -Array -Größen durchführen, aber Sie können eine Stapelzuweisung über durchführen _alloca

also das:

const int position = fullName.size();
char Name[position];

wird dies:

const int position = fullName.size();
char * Name = (char*)_alloca(position * sizeof(char));

Es ist nicht ganz dasselbe, aber es ist so nah wie in VC ++.

Andere Tipps

Dies ist in VC ++ nicht möglich. Ich weiß, ziemlich traurig :(

Die Lösungen umfassen:

  • Erstellen Sie es auf dem Haufen
  • Mach es konstant

Der neue C ++ - Standard (C ++ 0x) schlägt eine Funktion „Konstante Expression“ vor, die sich damit befasst. Weitere Informationen finden Sie unter Dies aus.

C ++ erfordert, dass die Größe des Arrays zur Kompilierungszeit bekannt ist. Wenn es Ihnen nichts ausmacht, eine nicht standardmäßige Erweiterung zu verwenden, erlaubt GCC Code wie Sie (Beachten Sie, dass es zwar nicht Standard-C ++ ist, es jedoch jedoch nicht Standard ist. ist Standard in C ab C99).

Ich würde auch vermuten, dass Sie einen Vektor (an diesem bestimmten Ort) mit weniger Schwierigkeiten verwenden könnten, als Sie glauben-einiges Code, der für ein Array geschrieben wurde oder überhaupt kein Umschreiben.

Dein char name[fullName.size()]; ist ein Beispiel für a Array variabler Länge Was - soweit ich weiß - in C ++ nicht standardisiert sind, also sind Sie dem Compiler ausgeliefert. [Etwas nicht off-themenhaft sind sie Teil des C99-Standards

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top