already defined

Raven280438

Erfahrenes Mitglied
Hi,

ich habe eine
, in der eine
#include "init.h"
eingebunden wird.
In einer
wird ebenfalls die
#include "init.h"
eingebunden.

Beim Compilieren des Programms bekomme ich die Fehlermeldung
1>titel.obj : error LNK2005: "int __cdecl set_graphic_mode(void)" (?set_graphic_mode@@YAHXZ) already defined in main.obj

In der init.h ist aber oben definiert:
Code:
#ifndef INIT_HEADER
#define INIT_HEADER

int set_graphic_mode() { 
[...]
}

#endif

Wo liegt hier der Fehler?


Gruß
 
Die Fehlermeldung sagt dir ganz klar, was der Fall ist. set_graphic_mode wird sowohl in der main.cpp als auch in der titel.cpp definiert.
 
Hi,

eben nicht.
Die Funktion set_graphic_mode() wird nur in der init.h definiert.

Ich bekomm die gleiche Fehlermeldung übrigends für alle Funktionen in der init.h

1>titel.obj : error LNK2005: "int __cdecl set_graphic_mode(void)" (?set_graphic_mode@@YAHXZ) already defined in main.obj
1>titel.obj : error LNK2005: "void __cdecl init(void)" (?init@@YAXXZ) already defined in main.obj
1>titel.obj : error LNK2005: "void __cdecl fatalError(char *)" (?fatalError@@YAXPAD@Z) already defined in main.obj
1>titel.obj : error LNK2005: "void __cdecl done(void)" (?done@@YAXXZ) already defined in main.obj
1>titel.obj : error LNK2005: "void __cdecl show(void)" (?show@@YAXXZ) already defined in main.obj


Gruß
 
Hi,

das #include wird durch den Quellcode der Include-Datei ersetzt.

Aber da ich in der init.h am Anfang
Code:
#ifndef INIT_HEADER
#define INIT_HEADER
int set_graphic_mode() {
[...]
}
#endif
stehn hab dachte ich die Funktionen werden nur 1 mal definiert.

Lieg ich da falsch? Wo ist der Fehler?


Gruß
 
Aha,

und wie bekomm ich dass jetzt hin, dass ich in beiden cpp-Dateien auf die Funktionen in der init.h zugreifen kann?
Ich bin ziemlicher C++ Anfänger ;)


Gruß
 
Indem du im Header lediglich die Vorwärtsdeklaration der Funktion machst und sie dann in einer der beiden CPP-Dateien mit ihrem Körper ausstattest.
 
Hi,

ich hab jetzt eine init.cpp angelegt und dort die Funktionen ausgelagert.
Damit ist das Problem erstmal beseitigt, es ergeibt sich aber ein Neues ;) Wie gesagt ich bin ziemlicher Anfänger

In der "main.h", die in allen Quellcode-Dateien eingebunden ist steht folgender Code:
#ifndef MAIN_H
#define MAIN_H

BITMAP* doublebuffer = NULL;
volatile int timerCounter = 0;

static void timerCounterUpdater() {
timerCounter++;
} END_OF_STATIC_FUNCTION(timerCounterUpdater);

LOCK_FUNCTION(timerCounterUpdater);
LOCK_VARIABLE(timerCounter);

#endif
Das ergibt jetzt den gleichen Fehler wie bei meinem vorherigen Problem:
1>titel.obj : error LNK2005: "struct BITMAP * doublebuffer" (?doublebuffer@@3PAUBITMAP@@A) already defined in main.obj
1>titel.obj : error LNK2005: "int volatile timerCounter" (?timerCounter@@3HC) already defined in main.obj
1>init.obj : error LNK2005: "struct BITMAP * doublebuffer" (?doublebuffer@@3PAUBITMAP@@A) already defined in main.obj
1>init.obj : error LNK2005: "int volatile timerCounter" (?timerCounter@@3HC) already defined in main.obj

Wie bekomm ich das jetzt hin, dass ich auf die Variablen "doublebuffer" und "timerCounter" in allen Dateien zugreifen kann (also global)?


Gruß
 
Zurück