[gelöst] statische Arrays in Klassen



  • ich möchte ein String Array in einer Klasse definieren. 😃
    jedoch bekomm ich bei:

    #include <string>
    
    class irwas {
        public:
            static string daten[] = {"a","b","c"};
    }
    

    immer folgende errors: 😮

    Fehler: a brace-enclosed initializer is not allowed here before »{« token
    Fehler: ungültige Initialisierung innerhalb der Klasse des statischen Datenelements vom nicht eingebauten Typen »std::string []«
    

    😕 😕 😕



  • Zuweisung innerhalb der Klassen sind nicht möglich, mach das einfach in einer Übersetzungseinheit.



  • Öäh O_o.

    so jezt mal ganz von vorne:
    Ich gehe mal davon aus, dass mit Übersetzungseinheit nicht Google gemeint ist.

    Zuweisung innerhalb einer Klasse: geht net, okay.

    "mach das einfach in einer Übersetzungseinheit".

    Das hört sich nur so "einfach" an 😃



  • "Übersetzungseinheit" ist letztlich eine CPP-Datei, nachdem sie durch den Präprozessor gekommen ist.

    Und praktisch sieht die Lösung so aus:

    //irwas.h
    #include <string>
    class irwas
    {
    public:
      static std::string daten[3];//ich bin mir nicht sicher, ob man die Arraygröße weglassen darf
      ...
    };
    
    //irwas.cpp
    #include "irwas.h"
    
    std::string irwas::daten[]={"a","b","c"};
    ...
    


  • ja danke hat geklappt.

    // cpp datei
    #include <string>
    using namespace std;
    class irwas {
        public:
            static string daten[];
    }
    string irwas::daten[]  = {"a","b","c"};
    

    😉 🙄



  • Bitt tu dir einen Gefallen und pack die Definition nicht direkt in den Header - damit handelst du dir nur Probleme mit dem Linker (Stichwort "ODR"-"One Definition Rule") ein.



  • CStoll schrieb:

    Bitt tu dir einen Gefallen und pack die Definition nicht direkt in den Header - damit handelst du dir nur Probleme mit dem Linker (Stichwort "ODR"-"One Definition Rule") ein.

    hmmmm ... und das lässt mich vermuten, dass das mit der variablen Länge ("[]") nicht klappt. Ich dachte, der Compiler müsste die Objektgröße feststellen können, wenn die Klassendeklaration zuende ist....

    Da bin ich aber auch nicht besonders fit drin.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    hmmmm ... und das lässt mich vermuten, dass das mit der variablen Länge ("[]") nicht klappt. Ich dachte, der Compiler müsste die Objektgröße feststellen können, wenn die Klassendeklaration zuende ist....

    Statische Elemente beeinflussen ja nicht Objektgröße. Aber ich würde trotzdem vermuten, dass der Compiler spätestens mit dem Konstrukt sizeof(daten) nichts mehr anfangen kann. Probiere ich später gleich mal aus.


Anmelden zum Antworten