variable-sized-Objekt kann nicht initialisiert werden

Habe ich eine Klasse wie diese

class aClass
{
  public:
    aClass() : N(5) {}
    void aMemberFunction()
    {
      int nums[N] = {1,2,3,4,5};
    }
  private:
    const int N;
};

Das testen von code ist

int main()
{
  aClass A;
  A.aMemberFunction();

  const int N = 5;
  int ints[N] = {5,4,3,2,1};
  return 0;
}

Wenn ich compilieren (g++) 4.6.2 20111027), bekomme ich die Fehlermeldung

problem.h: In member function void aClass::aMemberFunction()’:
problem.h:7:31: error: variable-sized object nums may not be initialized

Wenn ich kommentiere die Zeile mit int nums[N] ich nicht bekommen, eine Zusammenstellung-Fehler, so dass der gleiche code für die ints array ist in Ordnung. Ist das nicht der Wert der N zur Kompilierzeit bekannt?

Was ist Los? Warum ist nums als ein array mit variabler Größe? Warum sind die arrays nums und ints anders behandelt?

In C++ arrays erfordern Konstante Ausdrücke für Ihre Größe. d.h. es muss eine compile-Zeit konstant ist, aber N in deinem Beispiel wird dynamisch initialisiert, obwohl eine wörtliche.
Beachten Sie, dass gcc tatsächlich Unterstützung variabler Länge arrays in C++ als Erweiterung, die Sie einfach kann nicht initialisiert werden dass Sie wie

InformationsquelleAutor stardt | 2012-03-13

Schreibe einen Kommentar