Eigene statische Bibliothek mit globaler Variable



  • Ich habe eine eigene Bibliothek, die statisch gelinkt wird.
    In dieser Bibliothek gibt es eine einzige globale Variable, die zum Umschalten der Sprache genutzt wird.

    // (im echten Code mit namespaces, hier jetzt XXX als namespace)
    // header:
    extern Language gCurrentLanguage;
    
    // cpp
    Language gCurrentLanguage = English;
    

    Will ich gCurrentLanguage jetzt in dem Projekt verändern, wo ich die Bibliothek am Ende mitlinke, meldet mir der Compiler

    1>Localization.cpp(4): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>Localization.cpp(4): error C2371: 'XXX::gCurrentLanguage': Neudefinition; unterschiedliche Basistypen

    Ich kann also die Sprache nicht einfach umstellen wie geplant:

    // Im eigenen Projekt
    XXX::gCurrentLanguage = XXX::German;
    

    Was ist der Grund und wie kann ich das ändern?



  • Wo und wie ist Language definiert?



  • Direkt über der extern-Deklaration in der Header-Datei:

    enum Language { English, German };
    	extern Language gCurrentLanguage;
    


  • Und ist dieser Header in Localization.cpp eingebunden?



  • MFK schrieb:

    Und ist dieser Header in Localization.cpp eingebunden?

    Ja, genau. Localization.cpp als Teil des Projektes, das die Bibliothek verwendet, bindet diesen Header ein und direkt danach versuche ich, auf die globale Variable zuzugreifen mit den obigen Fehlermeldungen



  • Hast du verschiedene Headerdateien mit demselben Namen? Haben irgendwelche Header dieselben Include-Guards? Oder gibt es Kollisionen zwischen Include-Guards und Bezeichnern?

    Falls nicht, zeig ein Minimalbeispiel, das das Problem reproduziert.


  • Mod

    enum Language { English, German };
    extern Language gCurrentLanguage;
    
    Language gCurrentLanguage = English;
    

    kompiliert. Der Fehler ist woanders zu suchen.
    Wie minimale Beispiele zu konstruieren sind, wird ja erklärt



  • Ok, ich hatte die Vermutung, dass das was mit "kompilieren als bibliothek" zu tun hat. Da dem nicht so zu sein scheint, setze ich mich gleich nochmal ran und untersuche das. Ich melde mich



  • ok ganz dummer Fehler: Vor lauter programmieren hab ich die variable global anstatt lokal verändern wollen 🙄


Log in to reply