it-swarm.com.de

Array [n] vs Array [10] - Initialisiert ein Array mit einer Variablen vs einer reellen Zahl

Ich habe das folgende Problem mit meinem Code:

int n = 10;
double tenorData[n]   =   {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Gibt den folgenden Fehler zurück:

error: variable-sized object 'tenorData' may not be initialized

Während mit double tenorData[10] funktioniert.

Weiß jemand warum?

69
msmf14

In C++ sind Arrays mit variabler Länge nicht zulässig. G ++ lässt dies als "Erweiterung" zu (weil C dies zulässt). In G ++ (ohne -pedantic Den C++ - Standard zu befolgen) können Sie also Folgendes tun:

int n = 10;
double a[n]; // Legal in g++ (with extensions), illegal in proper C++

Wenn Sie ein "Array variabler Länge" (in C++ besser "Array mit dynamischer Größe" genannt, da Arrays mit variabler Länge nicht zulässig sind) möchten, müssen Sie entweder selbst Speicher dynamisch zuweisen:

int n = 10;
double* a = new double[n]; // Don't forget to delete [] a; when you're done!

Oder, noch besser, verwenden Sie einen Standardcontainer:

int n = 10;
std::vector<double> a(n); // Don't forget to #include <vector>

Wenn Sie immer noch ein richtiges Array wünschen, können Sie beim Erstellen ein Konstante und kein Variable verwenden:

const int n = 10;
double a[n]; // now valid, since n isn't a variable (it's a compile time constant)

Wenn Sie die Größe einer Funktion in C++ 11 ermitteln möchten, können Sie auch ein constexpr verwenden:

constexpr int n()
{
    return 10;
}

double a[n()]; // n() is a compile time constant expression
159
Cornstalks