was hat es mit den include auf sich? (linkerror : LNK2005)

Dezipaitor

Grünschnabel
ich verwende eine globale header datei (ohne afxstd)
und will diese gerne in verschiedenen anderen cpp dateien verwenden um auf globale symbole zugreifen zu können.
damit es keine doppelten bezeichner gibt
nehme ich #ifdef anweisungen.

der compiler funkz
aber der linker nicht :
er sagt immer dass die symbole in der headerdateien bereits vorhanden wären.

was kann ich tun?
 
Hi,

irgendwie werd ich aus Deiner Frage nicht so ganz schlau. Poste doch mal den Code und stell die Frage mal so, dass man sie auch versteht.

PS: Bitte auch mal die Netiquette lesen und möglichst auf unnötige leetspeech verzichten. Danke. :)
 
also folgendermasen

ich verwende eine headerdatei die einige globale variablen definiert.
diese werden in anderen header- und code-dateien gleichermasen verwendet, indem #include "global.h" angegeben wird.

diese global.h wurde mit preprozessor anweisungen zur fallunterscheidung gespickt, damit keine doppelte definition beim einbinden auftritt.

somit macht der compiler mit.
aber der linker gibt folgendes aus :

Linker-Vorgang läuft...
ThreadSocket.obj : error LNK2005: "bool islocked" (?islocked@@3_NA) bereits in VNCForwarder.obj definiert
ThreadSocket.obj : error LNK2005: "int LastUserSocket" (?LastUserSocket@@3HA) bereits in VNCForwarder.obj definiert
ThreadSocket.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > StdOutput" (?StdOutput@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) bereits in VNCForwarder.obj definier
t
ThreadSocket.obj : error LNK2005: "struct VNCSocket * UserSockets" (?UserSockets@@3PAUVNCSocket@@A) bereits in VNCForwarder.obj definiert
conout.obj : error LNK2005: "bool islocked" (?islocked@@3_NA) bereits in VNCForwarder.obj definiert
conout.obj : error LNK2005: "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > StdOutput" (?StdOutput@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@A) bereits in VNCForwarder.obj definiert
Debug/VNCForwarder.exe : fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden
Fehler beim Ausführen von link.exe.
 
die globalen variablen möchte ich halt überall benutzen können.
deshalb schließe ich diese global.h datei dort ein wo ich sie brauche.
wenn ich das nicht tue, dann meckert der compiler, dass er den bezeichner nicht kennt.
includiere ich sie ein, dann meckert der linker, dass diese variablen doppelt in der obj-datei vorhanden sind.
 
also mal von anfang an, in einer headerdatei kommen keine funktionen, sondern nur prototypen, defines, includes, klassen... und sonstiges... und dann sollte es auch funktionieren...

soweit ich das sehe hast du bool und int reingeschrieben, das geht nicht... es sei den es ist ein konstanter wert... also const int...

ps, ich hab gleich den ersten post verstanden ;)

#edit:
es gibt eine möglichkeit.... schreib mal "extern" vor dein int usw... das sollte gehn, auch wenn die variable vorher nicht definiert wurde...
 
Zuletzt bearbeitet:
Zurück