Zusätzliche cpp Files kompilieren & Linker error

The_Rave

Mitglied
Ich hab da eine MD5 Klasse die in ein VS Projekt eingebunden werden will. Wenn ich das hier in der main.cpp auskommentiere: mit // #include "md5.cpp" kommt dieser Fehler:
Code:
 c:\...\main.cpp(77) : error C2065: 'MD5Obj' : undeclared identifier
und noch ein paar andere. Das ist ja auch soweit in Ordnung.

Lasse ich das #include "md5.cpp" drinnen kommt aber das hier:

Code:
main.obj : error LNK2005: "public: void __thiscall MD5Obj::MD5Init(struct MD5Context *)" (?MD5Init@MD5Obj@@QAEXPAUMD5Context@@@Z) already defined in md5.obj

Was soll ich damit machen?
 

langer1801

Erfahrenes Mitglied
Hi,

warum bindest du denn eine .cpp.Datei in deine main.cpp? Der Fehler besagt, dass das Symbol schon in MD5obj definiert ist - ist ja auch logisch nach dem Kompilieren der cpp-Datei. Dann wird dieselbe Datei innerhalb von main.cpp nochmals kompiliert - und das geht schief.
Binde die Header-Datei ein, dann sollte es klappen.

Mfg

langer
 

The_Rave

Mitglied
Ja ich hab ja geschrieben daß ich beides versucht habe. Die Files in das Projekt hinzugefügt mit existierende Datei hinzufügen, dann findet VC mein MD5Obj nicht. Und dann in der Main.cpp eingebunden wo es dann natürlich doppelt kompiliert wurde.

Irgendwann bin ich dann auf den Trichter gekommen die md5 files ganz aus dem Projekt rauszuschmeissen und nur über die main.cpp einzubinden. Dann funktioniert es. Aber der Sinn einer Projektverwaltung ist für mich daß ich alle Files in meiner Projektstruktur habe. Aber warum kommt dann diese Fehlermeldung daß das md5obj nicht gefunden wird?
 

The_Rave

Mitglied
Ich weiß zwar nicht so genau warum, aber jetzt geht es. Die Fehlermeldung:
Code:
 c:\...\main.cpp(77) : error C2065: 'MD5Obj' : undeclared identifier
ist jetzt weg.

Die md5.cpp und die md5.h sind jetzt in der Projektstruktur wie sich das gehört. In der main.cpp muss jetzt auch nicht mehr die md5.cpp includiert werden, aber das war ja auch nur der Notbehelf da das übers Projekt alles nicht funktionierte.

Nach stundenlangen suchen in irgendwelchen Foren ohne ein wirkliches Ergebnis hab ich einfach mal probiert die md5.h wo ja die Klasse deklariert wird in die stdafx.h zu includieren und das aus der md5.cpp raus zu nehmen.

Warum funktioniert das includieren des Headerfiles nur über die stdafx.h?