Statische Variable bei Bibliothek



  • Hallo ...

    Ich habe folgendes Problem:

    Ich habe eine Bibliothek geschrieben, in welcher es folgende Klasse gibt:

    class WieAuchImmer
    {
        public:
            static void machwas();
        private:
            static int zahl;
    };
    
    void WieAuchImmer::machwas()
    {
          int wasAnderes = zahl;
    }
    

    Wenn ich diese Bibliothek nun verwenden, also linken will, bekomme ich folgenden Fehler:

    libbibliothek.so: undefined reference to WieAuchImmer::
    

    Nehme ich alle statischen Elementvariablen raus, geht alles wunderbar. Hat jemand eine Ahnung, woran das liegt?

    OS: Debian Etch, G++ 4.2

    Vielen, vielen Dank!



  • Greif dir eine Implementierungsdatei raus und füge folgendes hinzu:

    int WieAuchImmer::wasAnderes; // oder auch = 0, ein Konstruktoraufruf halt
    

    Das static-Gedöns ist nur die Deklaration, du brauchst aber auch noch eine Definition (damit der Speicher bereit gestellt wird). Die kannst du aber nicht in den Header packen, da du damit die ODR (One Definition Rule) verletzen würdest sobald der Header in mehreren Übersetzungseinheiten inkludiert wird.


Anmelden zum Antworten