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.