Linkerfehler bei statischen Variablen



  • Hallöchen!

    Ich hab ein Problem mit statischen Variablen:
    In meiner Dll ist eine Klasse in der alles statisch ist - damit ich da von überall drauf zugreifen kann. Nur irgendwas habe ich vergessen, da ich folgende Fehler kriege:

    Linker-Vorgang läuft...
    Bibliothek ..\Debug/LogDll.lib und Objekt ..\Debug/LogDll.exp wird erstellt
    Log.obj : error LNK2001: Nichtaufgeloestes externes Symbol "protected: static class CString CLog::s_strBenutzer" (?s_strBenutzer@CLog@@1VCString@@A)
    Log.obj : error LNK2001: Nichtaufgeloestes externes Symbol "protected: static bool CLog::s_fDatei" (?s_fDatei@CLog@@1_NA)
    Log.obj : error LNK2001: Nichtaufgeloestes externes Symbol "protected: static bool CLog::s_fTrace" (?s_fTrace@CLog@@1_NA)
    Log.obj : error LNK2001: Nichtaufgeloestes externes Symbol "protected: static class CZahlenbereiche CLog::s_Zahlenbereiche" (?s_Zahlenbereiche@CLog@@1VCZahlenbereiche@@A)
    Log.obj : error LNK2001: Nichtaufgeloestes externes Symbol "protected: static class CString CLog::s_strLogPfad" (?s_strLogPfad@CLog@@1VCString@@A)
    ..\Debug/LogDll.dll : fatal error LNK1120: 5 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    Habt ihr eine Idee, was ich vergessen haben könnte? Oder soll ich noch was von Quelltext posten? 😕



  • So, nach einer Runde Buchwälzen und try&error habe ich die Fehler weg.

    Allerdings verstehe ich nicht so ganz ob das auch richtig ist, was ich hier jetzt habe.

    😡 Wenn mein Hirn doch nicht so ein Sieb wär... 😡

    Ich habe nur folgende Zeilen in die Cpp der Klasse geschrieben:

    CString CLog::s_strBenutzer;
    CString CLog::s_strLogPfad;
    CZahlenbereiche CLog::s_Zahlenbereiche;
    bool CLog::s_fTrace = false;
    bool CLog::s_fDatei = false;
    

    Verständnisprobleme:
    1.) Sind das die selben Variablen wie die, die ich im Header deklariert habe?
    2.) Ich habe die ersten drei nicht initialisiert - aber weglassen kann ich die Zeilen auch nicht. (Initialisieren sich eigentlich selber.)



  • Hi,

    so wie du das machst ist das schon richtig. Weil Statische Variablen von "beginn" der Laufzeit des Programms an existieren, müssen sie initialisiert werden. Das sich die Variable selbst initialisiert kann der Compiler nicht wissen.

    MFG
    Kai



  • Na dann bin ich ja beruhigt. Das sah blos so komisch aus.

    Dankeschön! 🙂


Anmelden zum Antworten