1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Const-Array members initialisieren... wie?

  • escitalopram
  • 26. Januar 2006 um 21:18
  • Unerledigt
  • escitalopram
    4
    escitalopram
    Mitglied
    Punkte
    105
    Beiträge
    16
    • 26. Januar 2006 um 21:18
    • #1

    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?

    http://www.blasphemie.at

  • tivolo
    5
    tivolo
    Mitglied
    Punkte
    240
    Beiträge
    48
    • 26. Januar 2006 um 22:03
    • #2

    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

  • escitalopram
    4
    escitalopram
    Mitglied
    Punkte
    105
    Beiträge
    16
    • 26. Januar 2006 um 22:08
    • #3

    Ok, thx, damit kann ich was anfangen.

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

    http://www.blasphemie.at

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 26. Januar 2006 um 23:20
    • #4
    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

  • escitalopram
    4
    escitalopram
    Mitglied
    Punkte
    105
    Beiträge
    16
    • 27. Januar 2006 um 00:07
    • #5
    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.......

    http://www.blasphemie.at

  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    Punkte
    5.331
    Beiträge
    993
    • 5. Februar 2006 um 21:44
    • #6

    Wenn du verschiedene Konstruktoren brauchst, dann verwende doch verschiedene Signaturen.

    640K ought to be enough for anybody. :eek2:

  • escitalopram
    4
    escitalopram
    Mitglied
    Punkte
    105
    Beiträge
    16
    • 6. Februar 2006 um 01:18
    • #7

    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 :winking_face:

    *) außer es handelt sich um static members

    http://www.blasphemie.at

  • J.Petso
    15
    J.Petso
    Mitglied
    Reaktionen
    14
    Punkte
    2.384
    Beiträge
    457
    • 9. Februar 2006 um 12:02
    • #8

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

    Code
    #define MAX_SIZE 2
    
    
    class Karl {
      public:
        Karl() {
          zahlen[0] = 1;
          zahlen[1] = 2;
        }
        int zahl( int index ) {
          if( index < MAX_SIZE )
            return zahlen[index];
          else
            return 0;
        }
    
    
      private:
        int zahlen[MAX_SIZE];
    };
    Alles anzeigen

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

  • CornedBee
    2
    CornedBee
    Mitglied
    Punkte
    30
    Beiträge
    6
    • 6. März 2006 um 11:41
    • #9

    Kurz und gut, es ist eine Syntax-Limitierung von C++ über die man üblicherweise sehr selten stolpert.

    All the buzzt
    CornedBee :face_with_rolling_eyes:

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung