Problem mit mehrfach eingebundener Header-Datei -> Linker-Fehler
-
Hallo.
Habe folgendes Problem:
Habe ne h-Datei, in der der Prototyp einer Funktion definiert wird.
Diese Funktion wird dann in der zugehörigen cpp-Datei implementiert und in einer anderen cpp-Datei verwendet. Also binden beide cpp-Dateien den Header ein, in welchem die Funktion definiert ist.Header:
#ifndef GRAPHIC_DIALOG_H #define GRAPHIC_DIALOG_H //[...] BOOL CALLBACK GraphicDialogMsg(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam); //[...] #endifWie gesagt, der Header wird von zwei verschiedenen cpp-Dateien eingebunden, daraufhin meldet sich der Linker bezüglich eines mehrfach definierten Symbols:
GraphicDialog.obj : error LNK2005: "int __stdcall GraphicDialogMsg(struct HWND__ *,unsigned int,unsigned int,long)" (?GraphicDialogMsg@@YGHPAUHWND__@@IIJ@Z) ist bereits in Game.obj definiert.
C:\Projekte\2D-Engine\Debug\2D-Engine.exe : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.Dachte eigentlich, dass ich das Problem mit #ifndef umgehen kann.. (?)
Wo ist da mein Fehler?
Hoffe, ihr könnt mir helfen.MfG
Hundefutter
-
Also du musst offenbar in dem Header eine Funktion _definiert_ haben. Damit landet die Implementierung dem Modul (.obj oder wie das bei deinem Compiler ist) einer jeden .cpp-Datei, die den Header einbindet. Wenn der Linker dann die .obj-Dateien zusammenführen möchte, findet er auf einmal für ein und die selbe Funktion X Implementierungen (X-mal Code). Das führt dann zu dieser Fehlermeldung.
Viele Grüße,
Michael
-
Die Deklaration darf, soweit ich weiß, so oft in einer Cpp-Datei drin stehen, wie sie will. Bist du dir sicher, dass die Implementation nicht aus Versehen auch noch in einer anderen Cpp-Datei drin steht? Und ansonsten sind vielleicht die Objekt-Dateien durcheinander geraten, also einfach mal das Projekt bereinigen und neu erstellen.
-
Oh, ich hab eigentlich nur auf die Fehlermeldung geschaut und nicht darauf, dass der TE audrücklich sagt, dass der Header nur deklariert
Problem ist natürlich dasselbe.
-
Hui, das ging ja schnell...

War mir eigentlich recht sicher, dass die Funktion nur ein mal im Header definiert war und dann auch nur ein mal in einer der beiden cpp-Dateien implementiert wurde.
Habe daraufhin den Hinweis mit dem Bereinigen des Projektes versucht und nun funktioniert es... Naja, versteht das mal wer will..Danke für die schnelle Hilfe!
MfG
Hundefutter
-
Hundefutter schrieb:
dass die Funktion nur ein mal im Header definiert war und dann auch nur ein mal in einer der beiden cpp-Dateien implementiert wurde.
Nur der Vollständigkeit halber und um späteren Missverständnissen vorzubeugen:
Die Definition einer Funktion IST ihre Implementation. Der Funktionskopf alleine ohne den Rumpf, also das was normalerweise im Header steht, nennt man Deklaration.