static über mehrere libs



  • Hallo,

    ich habe eine statische variable "a" in einer lib A (unter windows). Nun habe ich eine andere lib B die den header (Klasse) einbindet (wo a implementiert ist).

    Ich kann zwar cross-lib mässig von lib B auf die statische variable zugreifen, sie ist allerdings immer "leer" (double wert der immer 0 bleibt).

    Korrepondierende ausgaben in der lib A sagen mir aber dass die statische variable a nicht leer ist.

    FRAGE: Kann es sein dass statische variablen über lib-grenzen hinweg nicht abrufbar sind, also jede lib "ihre eigene" statische variable hat?

    Danke



  • wie ist die Variable im header denn definiert?

    so

    static int aLibStatic; // das ist falsch. Eigentlich sollte der Linker meckern
    

    oder so

    extern int aLibStatic;
    


  • hheadr schrieb:

    static int aLibStatic; // das ist falsch. Eigentlich sollte der Linker meckern
    

    Warum sollte der Linker meckern?



  • unklarer schrieb:

    FRAGE: Kann es sein dass statische variablen über lib-grenzen hinweg nicht abrufbar sind, also jede lib "ihre eigene" statische variable hat?

    Ja



  • Mit extern sollte das nicht passieren.



  • danke euch, kann ihc einen member als extern static deklarieren?



  • unklarer schrieb:

    danke euch, kann ihc einen member als extern static deklarieren?

    Ne. Weil static heißt ja "nur in dieser Übersetzungseinheit sichtbar", da kann extern deine Variable lange suchen.



  • Ok, wäre folgendes möglich ?

    * in der lib B einen static private member anzulegen und diesen innerhalb des moduls zu setzen/upzudaten

    * eine funktion foo_print() zu deklarieren innerhalb der lib B die die static variable ausgibt

    * aus lib A die foo_print() aufzurufen?

    Wird dann der "korrekte" Wert (innerhalb lib A, getriggered von lib 😎 ausgegeben?

    Oder funktioniert selbst das nicht?

    Danke



  • 1. es gibt keine "lib" im C++-Standard. Was du meinst ist also nicht klar.
    2. in allen mir bekannten Implementierungen von Bibliotheken für C++ kann man statische Membervariablen benutzen.
    3. Statt hier Prosa zu benutzen solltest die C++ zeigen.



  • unklarer schrieb:

    Ok, wäre folgendes möglich ?

    * in der lib B einen static private member anzulegen und diesen innerhalb des moduls zu setzen/upzudaten

    Ja.

    Eine statische Klassenvariable verhält sich ganz anders als eine statische, freie Variable:

    Bei der Klassenvariablen darf es nur eine Definition geben, die du in eine cpp-Datei tust. Diese Variable existiert dann auch global nur einmal.

    Eine freie Variable kann beliebig viele Definitionen und damit Instanzen haben, wenn sie als static gekennzeichnet ist.

    static kann also ganz unterschiedliche Bedeutungen haben.


Anmelden zum Antworten