Error LNK 2005



  • Hallo,

    Bei meinem Programm taucht dieser fehler auf wenn ich den header einer klasse
    in das H file stelle

    zb

    Klasse A.h inlcudiert Class B.h -> es kommt zum Link fehler
    KWMedicalImageViewerExampleLib.lib(vtkKWMyWindow.obj) : error LNK2005: "public: __thiscall MFAImagePreview::MFAImagePreview(void)" (??0MFAImagePreview@@QAE@XZ) already defined in KWMedicalImageViewerExample.cxx.obj

    wobei MFAImagePreview::MFAImagePreview(void) der konstruktor von Klasse B ist

    wenn ich allerdings in A.cxx den Header von B.h stelle, dann kommt es zu keinem Fehler

    ich verstehs leider nicht, hat jemand einen klugen rat parat?

    Thx,lg
    Maz



  • Hast du Include Guards drin? (falls dir das nichts sagt: google...)

    Ansonsten versuch mal Code zu posten, und zwar ein minimales Beispiel, das man so wie es ist in den Compiler jagt und den Fehler bekommt. Das heißt reduziere deinen Code auf das für den Fehler wesentliche!


  • Mod

    Kann es sin, dass du in B.h MFAImagePreview::MFAImagePreview(void) definiert wird (und zwar nicht inline!)?



  • @Pumuckl

    ja ich hab Include gurads drin

    leider ist dasa ein auf KWWidgets baiserendes bsp, dass den sourcode in TCL umformatiert, ein minimales beispiel krieg ich so schnell nicht zu stande, ohen dass ich vermutlich ewig viele weitere fehler produziere

    @Sepp
    in meinem MFAImagePreview.h file steht nur
    ...
    public:
    MFAImagePreview();

    wir also nicht vordefiniert

    bei genauerem hinsehen hab ich gemerkt dass weiter oben im Editor-kompilierungsnachrichtstext steht

    vtkKWMyWindowTcl.obj : warning LNK4006: "public: __thiscall MFAImagePreview::MFAImagePreview(void)" (??0MFAImagePreview@@QAE@XZ) already defined in vtkKWMyWindow.obj; second definition ignored

    da ist es allerdings nur eine warnung

    abere die eigentliche frage für mich ist noch immer, wieso kann ichs im *.cxx file ohne probleme verwenden, und im H file nicht?

    Danke für eure Meinungen!



  • Ok leute habs gelöst

    das problem war, dass mein MFAImagePreview.h file am ende das MFAImagePreview.cxx
    includiert hat

    also

    #ifndefine __MFAImagePreview_h
    #define __MFAImagePreview_h

    class MFAImagePreview{
    .......

    }
    #include MFAImagePreview.cxx
    #endif

    das hat probleme gemacht

    ich habs jetzt im CmakeLists.txt file mit

    add_executable(PATH_TO/MFAImagePreview.cxx) angegeben!

    danke für eurer hilfe dennoch 🙂


Anmelden zum Antworten