Skid
Erfahrenes Mitglied
Hallo,
also ich habe in einen meiner Programme den Fehler:
Ich weiss warum der Fehler zustande kommt, verstehe jedoch nicht genau warum.
Ich habe hier die Lösung für das Problem gefunden, verstehe jedoch nicht, warum das Problem so zulösen ist.
Im Studium habe ich gelernt, dass die Fehler -wie die Fehlermeldungen selbst schon sagen- durch eine mehrfach definition einer Variable zustande kommen, was der Fall ist, wenn die Variable in einer Headerdatei definiert ist und zwei CPP-Dateien diese einbinden.
Bis hier hin komme ich mit, jedoch haben wir auch gelernt, wie man das Problem beseitigen kann und zwar wie folgt:
Angenommen wir haben eine Header "header.h" die wie folgt aussieht:
diese wird von main.cpp und neben.cpp eingebunden, dann kommt es zu den oben genannten Fehlern.
Zur Lösung habe ich gelernt, dass man mit define, ifndef und endif arbeiten sollte, um eine Mehrfacheinbindung der Headerdatei zu unterdrücken, also so:
Jedoch wird bei mir der Fehler weiterhin angezeigt, d.h. immernoch Mehrfachdeklarationen.
In der obengenannten Seite wird mir eine Lösung vorgeschlagen die das Schlüsselwort extern nutzt was die Variable definiert, aber die eigentliche Deklaration findet in den CPP-Dateien statt die die Variable nutzen, dass bringt mir bei meinem Problem nichts, da beide CPP-Dateien die gleiche Variable nutzen sollen, deswegen definiere ich diese in der Header als globale Variable.
Habe ich hier gerade etwas verwechselt ?
Mir kommt das Problem gerade recht merkwürdig vor, da ich diesem Problem mit der obengenannten Problemlösung aus dem Weg gehen konnte.
Vielleicht sieht das bei DirectX-Programmierung anders aus, was dieses Problem angeht ?
Liebe Grüße,
Skid.
also ich habe in einen meiner Programme den Fehler:
Code:
Error LNK2005: "int windowHeight" (?windowHeight@@3HA) ist bereits in main.obj definiert.
Error LNK2005: "int windowWidth" (?windowWidth@@3HA) ist bereits in main.obj definiert.
Fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.
Ich weiss warum der Fehler zustande kommt, verstehe jedoch nicht genau warum.
Ich habe hier die Lösung für das Problem gefunden, verstehe jedoch nicht, warum das Problem so zulösen ist.
Im Studium habe ich gelernt, dass die Fehler -wie die Fehlermeldungen selbst schon sagen- durch eine mehrfach definition einer Variable zustande kommen, was der Fall ist, wenn die Variable in einer Headerdatei definiert ist und zwei CPP-Dateien diese einbinden.
Bis hier hin komme ich mit, jedoch haben wir auch gelernt, wie man das Problem beseitigen kann und zwar wie folgt:
Angenommen wir haben eine Header "header.h" die wie folgt aussieht:
Code:
//----------------------------------------
// GLOBAL
//----------------------------------------
int windowH;
int windowW;
diese wird von main.cpp und neben.cpp eingebunden, dann kommt es zu den oben genannten Fehlern.
Zur Lösung habe ich gelernt, dass man mit define, ifndef und endif arbeiten sollte, um eine Mehrfacheinbindung der Headerdatei zu unterdrücken, also so:
Code:
#ifndef HEADER_H
#define HEADER_H
//----------------------------------------
// GLOBAL
//----------------------------------------
int windowH;
int windowW;
#endif HEADER_H
Jedoch wird bei mir der Fehler weiterhin angezeigt, d.h. immernoch Mehrfachdeklarationen.
In der obengenannten Seite wird mir eine Lösung vorgeschlagen die das Schlüsselwort extern nutzt was die Variable definiert, aber die eigentliche Deklaration findet in den CPP-Dateien statt die die Variable nutzen, dass bringt mir bei meinem Problem nichts, da beide CPP-Dateien die gleiche Variable nutzen sollen, deswegen definiere ich diese in der Header als globale Variable.
Habe ich hier gerade etwas verwechselt ?
Mir kommt das Problem gerade recht merkwürdig vor, da ich diesem Problem mit der obengenannten Problemlösung aus dem Weg gehen konnte.
Vielleicht sieht das bei DirectX-Programmierung anders aus, was dieses Problem angeht ?
Liebe Grüße,
Skid.