Const-Array members initialisieren... wie?

  • Hi, ich habe ein Problem. Wenn man ein nichtstatisches const-member initialisiert kann man ja nicht folgendes schreiben:

    Code
    class Karl {
      public:
      const int zahl=1;
    };

    sondern man muss das stattdessen so formulieren:

    Code
    class Karl {
      public:
      const int zahl;
      Karl() : zahl(1) {}
    };

    Soweit so gut, was ist jetzt aber wenn "zahl" ein array ist?

    Code
    class Karl {
      public:
      const int zahlen[2];
      Karl() : zahlen({1,2}) {}
    };

    An dieser Stelle bricht mein g++ ab mit der Fehlermeldung

    Zitat

    error: expected primary-expression before '{' token

    Wie mach ich das jetzt richtig? Außerhalb einer Klasse würd ich ja einfach schreiben:

    Code
    const int zahlen[]={1,2};


    aber in einer Klasse darf ich das ja nicht. Kann mir da bitte jemand weiterhelfen?

  • in der initialization-list im konstruktor darfst du arrays in C++ nicht initialisieren... und außerdem hätte jede instanz der klasse dann eh die selben werte, d.h. du kannst stattdessen einfach ein static const verwenden.

    mfg
    -tiv

    Stefan Reinalter
    Lead Programmer @ Sproing Interactive

  • Zitat von escitalopram

    Weißt du zufälligerweise auch noch wie man das macht, wenn man mehrere Konstruktoren hat, die das Array mit verschiedenen Werten initialisieren sollen? Eine seltsame Regel ist das...


    Es geht für einen ctor nicht - also auch nicht für mehrere.
    Abgesehen davon ist das Array wohl nicht mehr konstant, wenn es in verschiedenen ctors verschiedene Werte besitzen soll.

    Dipper dipper dii dipper dii dipper dii duuu

  • Zitat von sauzachn

    Es geht für einen ctor nicht - also auch nicht für mehrere.
    Abgesehen davon ist das Array wohl nicht mehr konstant, wenn es in verschiedenen ctors verschiedene Werte besitzen soll.

    Ein Objekt wird nur einmal konstruiert, demnach können (nichtstatische) const members verschiedener Instanzen verschiedene Werte haben, unabhängig davon wieviele Konstruktoren die entsprechende Klasse hat - es sei denn es handelt sich um arrays.......

  • Es geht darum, dass eine Klasse keine const members (die man im Konstruktor initialisieren muss) haben kann die arrays sind*, weil man die nicht initialisieren darf. Und mich würde interessieren, warum das so festgelegt wurde, weil irgendwie behindert einen das bei der Arbeit ;)

    *) außer es handelt sich um static members

  • Ich frage mich, was dagegen spricht, das Ganze private statt const zu machen, so wie:

    "Egbert B. Gebstadter is the Egbert B. Gebstadter of indirect self-reference." - Egbert B. Gebstadter

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!