[C++] Linker Problem

ulmi

Mitglied
Hallo,

ich hab ein Problem beim compilieren mit VS.NET 2003.

Ich habe ein Projekt erstellt, das aus einer zentralen Headerdatei und mehreren cpp-Dateien besteht. Im zentralen Header binde ich eine weitere Headerdatei mit zentralen Definitionen ein.
Wenn ich nun versuche alles zu erstellen bekomme ich eine Linker-Fehlermeldung (2005) zurück, die besagt, das die Objekte der zentralen Definition bereits definiert sind.
Kann mir irgendwer einen Tip geben wie ich diesen Fehler umgehen kann?

#pragma once bzw. #ifndef habe ich bereits versucht aber das hilft nicht.
Bisher hatte ich noch keine Problem beim mehrfachen einbinden ein und desselben Headers.
 
Da kann ja was nicht stimmen: Wenn der Linker drankommt, dann sind schon alle Dateien kompiliert. Also entweder hast Du einen Compilerfehler oder der Fehler ist ein anderer.

Ich vermute mal, es ist ein Compilerfehler und er kommt daher, daß du in Deinen Headerdateien nicht nur Deklarationen sondern auch Definitionen hast. Diese Definitionen solltest du in die entsprechenden cpp-Dateien packen.
 
Es ist definitiv der Linker!
Ich habs erstmal mit
Code:
/FORCE:MULTIPLE
erschlagen. Aber ich werde mich nochmal drum kömmern.
Mir ist auch nicht klar wie ich die Header-Datei aufspalten soll.
Code:
#pragma once

#include <objbase.h>


extern "C" const IID IID_IComponent;
extern "C" const GUID CLSID_IComponent;

interface IComponent:IUnknown
{
	virtual void __stdcall GetTimeString(CString* ZeitString)=0;
	virtual void __stdcall GetDateString(CString* DatumString)=0;
	virtual void __stdcall GetDateString(CString* DatumString, int Format)=0;
};

// {BDF4C5D5-1AAC-47a9-BF91-AA7E4336E90C}
extern "C" const IID IID_IComponent = 
{ 0xbdf4c5d5, 0x1aac, 0x47a9, { 0xbf, 0x91, 0xaa, 0x7e, 0x43, 0x36, 0xe9, 0xc } };

// {EA7E9303-EE2E-43f3-A382-18FF962F6C16}
extern "C" const CLSID CLSID_IComponent = 
{ 0xea7e9303, 0xee2e, 0x43f3, { 0xa3, 0x82, 0x18, 0xff, 0x96, 0x2f, 0x6c, 0x16 } };

Edit:

Angemeckert werden CLSID_IComponent und IID_IComponent.
 
Zuletzt bearbeitet:
Sorry, natürlich ist das der Linker! Der meckert dann, daß einige Objekte mit gleichem Namen vorhanden sind (aus o.g. Grund).

Nimm einfach die Definitionen (unten) aus der Headerdatei und verschiebe sie in eine passende C-Datei. Dann sollte es schon funktionieren
 
Zurück