Globales Feld im Konstruktor initialisieren



  • hallo Leute,

    weis jemand wieso

    class berta
    {
     public:
     berta();
     ~berta();
    
     int feld[];
    };
    
    berta::berta()
    {
         feld[]={63,14,93,12,56,34,74,12,99,68};
    }
    
    berta::~berta{}
    

    nicht funktioniert aber

    berta::berta()
    {
        int feld[]={63,14,93,12,56,34,74,12,99,68};
    }
    

    (nur lokal) funktioniert??

    ich bräuchte ein globales feld das ich einfach initialieren will.
    (Die werte in der Liste sind nicht mit einer schleife realisierbar)

    Und per hand

    feld[0]=63
    feld[1]=14
    (...)
    

    ist uncool

    Weis jemand Rat?



  • Initialisierungslisten arbeiten nur zur Initialisierung (von C-style Typen), nicht zur späteren Zuweisung. Und die Anweisung feld[]=...; im Construktor ist eine Zuweisung.
    (leider gibt es keine Möglichkeit, C-Initialisierungslisten mit C++ Ctor-Initialisierungen zu kombinieren, sonst hätte ich folgendes vorgeschlagen:

    berta::berta()
    : feld({63,14,...})
    {}
    

    Ich weiß nicht, ob das für dich anwendbar ist, aber versuch's mal mit einem static-Feld:

    class berta
    {
    public:
      berta();
      ~berta();
    
      static int feld[10];
    };
    
    int berta::feld[]={63,14,93,12,56,34,74,12,99,68};
    

    (btw, die Größe des Feldes kannst du bei Membern nicht automatisch berechnen lassen)

    Falls du wirklich für jedes Objekt eine eigene Version des Feldes brauchst, nimm eine Hilfsvariable und kopiere die (per Schleife o.ä.) in deinen Member.



  • Die Lösung mit der static Variablen (wobei die Klasse in meinem Fall sowieso ein singleton ist) war super! Im Prinzip könnte ich mir sogar das static sparen und einfach die Initialisierungsliste ausserhalb des Constructors schreiben.

    Gruss



  • traceman schrieb:

    Im Prinzip könnte ich mir sogar das static sparen und einfach die Initialisierungsliste ausserhalb des Constructors schreiben.

    Nicht wirklich - nicht-statische Variablen darfst du nicht außerhalb des Ctor's initialisieren 😉



  • ah ok...gut zu wissen, ohne profi wissen wäre ich hier nicht weitergekommen...
    thx


Anmelden zum Antworten