Probleme mit mehreren header- und cpp-Dateien



  • Hallo,

    ein c++ projekt (visual studio) hat mehrere header und *.cpp-dateien. den inhalt der header-dateien benötigt jede cpp-datei. Manche header-Dateien benötigen auch den Inhalt von anderen header-files.
    Nun baue ich mir gerade eine dll-bibliothek und bekomme nur linker-fehler wie diesen:
    UI.obj : error LNK2005: "wchar_t * szPath" (?szPath@@3PA_WA) ist bereits in gen_RemoteControl.obj definiert.

    in jeder header-datei steht ein #pragma once am anfang. die cpp-dateien lasse ich einfach alle benötigten header-dateien includen und manche header-dateien includen auch andere, die sie benötigen. doch das geht ja anscheinend gar nicht.
    in welchen dateien müssen nun welche header-dateien included werden?

    vielen dank
    martin



  • Hast du Funktionen in Headern definiert (nicht deklariert), ohne ein inline davorzustellen?



  • Nein, das habe ich nicht getan. szPath ist auch eine Variable...



  • Sorry, verlesen 🙄



  • Vermutlich hast du in UI.cpp und gen_RemoteControl.cpp jeweils

    wchar_t * szPath = ...
    

    stehen.



  • inspire schrieb:

    Nein, das habe ich nicht getan. szPath ist auch eine Variable...

    Und die hast du im Header definiert? Wenn ja, schau dir mal an, was extern macht.

    PS: Include Guards helfen nur gegen mehrfache Definitionen in einer Übersetzungseinheit, deine Linker-Fehler entstehen wenn der Linker mehrere compilierte ÜBersetzungseinheiten zusammenfassen will.



  • extern int Foo; //Deklaration
    int Foo; //Definition
    int Foo = 1; //Definition und Initialisierung
    


  • aah ganz leicht, vielen Dank! 🙂



  • Lies Dir bitte den Abschnitt über die "one-definition-rule" (ODR) in Deinem C++ Buch durch. Ggf musst Du nachlesen, was die da mit "translation unit" (Übersetzungseinheit) meinen.


Log in to reply