Linker, mehrfach definiertes Symbol Problem
-
Hey
Ich komme mal wieder nicht weiter.
Ich habe diese Headerdatei:#ifndef _MAP_H #define _MAP_H const int MAP_WIDTH = 20; const int MAP_HEIGHT = 20; const int MAP_SCALL = 10; int map[ MAP_WIDTH * MAP_HEIGHT ] = { 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 00 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 01 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 02 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 03 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 04 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 05 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 06 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 07 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 08 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 09 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 10 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 11 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 12 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 13 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 14 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 15 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 16 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 17 1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,1, // 18 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, // 19 }; #endifDiese Headerdatei Include ich nun in 2 meiner Quelldateinen, worin sich jeweils definitionen von Memberfunktionen der jeweiligen Klasse befindet(Fals nötig kann ich diese auch posten!).
Der Linker meldet mir nun eine Fehler, dass "int map" bereits efiniert sei.
Jemand ne Idee, was ich verkehrt mache ?
mfg Darter
-
Das File sieht korrekt aus. Die Include-Guards wurden richtig gesetzt.
EDIT: Das ist wahrscheinlich das Header-File. In Headern deklariert man Variablen eigentlich. Du definierst und initialisierst sie jedoch!
-
hast du mal einen namespace probiert?
-
Deklaration, Definition und Initialisierung:
extern int a; //Deklaration int a; //Definition int a = 3; //Definition und InitialisierungUnd der ganze Spass (ausser das Zweite) geht auch mit Konstanten.
-
EOutOfResources schrieb:
EDIT: Das ist wahrscheinlich das Header-File. In Headern deklariert man Variablen eigentlich. Du definierst und initialisierst sie jedoch!
GEnau das dürfte das Problem sein.
@Darter: Die Lösung sieht so aus, daß du die Definition in eine deiner Quelldateien verschiebst und in den Header nur ein
extern int map[MAP_WIDTH*MAP_HEIGHT];schreibst.
-
CStoll schrieb:
EOutOfResources schrieb:
EDIT: Das ist wahrscheinlich das Header-File. In Headern deklariert man Variablen eigentlich. Du definierst und initialisierst sie jedoch!
GEnau das dürfte das Problem sein.
@Darter: Die Lösung sieht so aus, daß du die Definition in eine deiner Quelldateien verschiebst und in den Header nur ein
extern int map[MAP_WIDTH*MAP_HEIGHT];schreibst.Hey.
Danke, so funktioniert es auf jeden fall, aber ist dass dein eine "saubere" Art und Weise sowas zu lösen ?
mfg Darter
-
Darter schrieb:
ist dass dein eine "saubere" Art und Weise sowas zu lösen ?
Das ist die saubere Art. Deine Alte ist Müll.
-
Ja, ist es, zumindest was die Definition und Einhaltung der ODR angeht. Du hast schließlich nur eine Map, also brauchst du auch nur eine Definition dafür.
Echt sauber wird es erst, wenn du auf globale Variablen verzichtest (und das nackte Array durch einen vernünftigen Container ersetzt). Aber das dürfte etwaf mehr Aufwand im Rest des Programms bedeuten.