Linker Error: ... ist bereits definiert



  • Hallo.

    Folgende Situation: Zwei Funktionen in 2 unterschiedlichen Dateien,

    Datei1.cpp
    
    DWORD WINAPI Function1(LPVOID lpParam)
    {
      CSingleLock(&csEntry);
      ...
    }
    
    Datei2.cpp
    
    DWORD WINAPI Function2(LPVOID lpParam)
    {
      CSingleLock(&csEntry);
      ...
    }
    
    Header.h
    
    CCriticalSection csEntry;
    

    sollen mit einer CriticalSection gegeneinander gesperrt werden. Header.h ist in den jeweiligen Headerfiles von Datei1.cpp und Datei2.cpp includiert.

    Nun erhalte ich folgende Fehlermeldung:

    "class CCriticalSection csEntry" ist bereits in Datei1.obj definiert.
    Mindestens ein mehrfach definiertes Symbol gefunden.

    Wieso und wie löse ich das?



  • EDIT: War Quatsch... 🤡

    Du kannst deine Globale in der einen cpp-Datei ganz normal als globale Variable deklarieren und in der zweiten mit einem "extern"-Statement deklarieren, dann ist sie da auch bekannt.

    Also so:

    //Datei1.cpp
    CCriticalSection csEntry;
    
    //Datei2.cpp
    extern CCriticalSection csEntry;
    


  • Das steht da schon!



  • Man definiert keine Variablen in Headerdateien.

    Steck die Definition in eine einzige .cpp-Datei, und in den Header nur eine Deklaration (extern).



  • MFC Man schrieb:

    Das steht da schon!

    Ja, ich hab deinen Post nicht richtig gelesen (und mich schon korrigiert)...



  • Das wars! Danke.


Anmelden zum Antworten