globale Variablen - Linker Warnung
-
Hallo,
ich habe in einer Header-Datei folgendes geschrieben:
#ifndef unit1H
#define unit1H
...
int i;
#endifDiese Header-Datei habe ich nun in mehrere *.cpp eingebunden. So weit so gut!
Nun das Problem:
in der Datei unit1.cpp ist i bekannt und kann auch ohne probleme verwendet werden. in den anderen *.cpp-Dateien ist i zwar auch bekannt, hat aber den Wert, den es in unit1.cpp erhalten hat vergessen und ist wieder 0. Sollte nicht eine globale Variable ihren Wert durch das gesamte Programm behalten? Ist i vielleicht mehrfach vorhanden, obwohl es zwischen den anweisungen #ifndef ... #endif steht? Scheinbar ja! Der Linker Wwarnt mich davor, dass i in mehreren Modulen vorhanden sei. und zwar in jedem, in dem die Datei unit1.h eingebunden ist.
Was habe ich falsch gemacht und wie kann ich das Problem beheben?
Danke
KAi
-
was steht denn in den anderen Modulen drin
?
-
extern int i;
-
...hmmm globale Variablen sind grundsätzlich immer schlecht und zeugen von schwachem Programmdesign...
Aber was solls? hier hört sowieso niemand mehr auf mich ... lies mal diese Artikel:
Variablen in anderen Modulen nicht sichtbar ?!? Warnung des Linkers
-
in header dateien darfst du keine globalen variablen definieren (gobal macht man sowie so nicht). Definiert wird immer nur in einer cpp Datei. in der .h seht dann nur die declaration, d.h. die Info, daß irgend wo in einer cpp das i definiert ist und der Linker es dann schon finden wird.
in die .cpp
int i;
in die .h kommt dann so etwas wie
extern int i;
glaub ich wenigstens.
-
@Locke: Wenn schon unbedingt einfach die Lösung posten, dann vielleicht auch noch mit einer Erklärung.... sonst bleibt der Lerneffekt definitv aus und bei nächster Gelegenheit stolpert er/sie wieder drüber. Danke.
-junix
-
Hallo,
natürlich wieß ich das mit den globalen Variablen, aber ich dachte ich kann es mir einmal leicht machen, und hoffte dass es funktionieren würde.
Trotzdem danke!
KAi