Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit statischer Variable

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.10.2007, 22:46 Uhr
jdelmour



Hallo liebe Experten

ich kämpfe mit folgendem Problem:

wie legt man eine statische Variable in einem Header-File an, dessen Inhalt in allen CPP auch das gleiche sein soll?

Ich habe in einer Header-Datei folgende Variable definiert:

static int verbose_mode = 0;


Diese Header-Datei wird von allen anderen Dateien includiert, da sie zentrale Definitionen wie DEFINES und Types enthält. Unter anderem enthält sie ein DEFINE, das die statische Variable verbose_mode auswertet und in Abhängigkeit der Werte eine Funktion ausführt oder halt nicht.

Wenn ich jetzt in der main() dieser Variable einen Wert zuweise, innerhalb einer anderen CPP-Datei aber auf diese variable zugreife, erhalte ich 0, und nicht den vorher zugewiesenen Wert. Erst, wenn ich innerhalb der CPP den Wert nochmals zuweise, erhalte ich auch an dieser Stelle den zugewiesenen Wert zurück.

Sprich: je nach dem, von wo aus das o.g. DEFINE ausgeführt wird (bzw dessen Inhalt), gibt es verschiedene verbose_mode-Werte.

Die Variable ist im gesamten Projekt nur einmal definiert. Bis jetzt habe ich das Problem immer dadurch umschifft, das ich alle "globalen Variablen" immer als Pointer auf eine Klasse mit mir herumgeschlept habe. Jetzt möchte ich das Problem aber mal "richtig" angehen und eine vernünftige Lösung erarbeiten.

Ich arbeite mit KDevelop 3.3.5 unter Linux 2.6.18 und mit GMake/GCC.

Wie behebt man das Problem?


Viele Grüße, und vielen Dank im Voraus
JDelmour

PS: bloß gut, das ich den Text vor Abschicken noch in die Zwischenablage kopiert habe. Denn nach Abschicken kam die Fehlermeldung "Subject zu lang", und nach "zurück" war der Text weg Dies nur als freundlicher Hinweis an die Foren-Admins
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.10.2007, 23:58 Uhr
0xdeadbeef
Gott
(Operator)


...indem du die Variable nicht statisch machst? Das ist nämlich ziemlich genau, was das bewirkt...

Im Übrigen solltest du globale Variablen nicht benutzen, das bringt nur Ärger - sie sind nicht threadsicher, und du findest nachher durch deinen Code nicht mehr durch.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.10.2007, 00:15 Uhr
~BuddyLove
Gast


www.tfh-berlin.de/~kempfer/


MfG

BuddyLove
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.10.2007, 14:46 Uhr
ao

(Operator)



Zitat von 0xdeadbeef:
Im Übrigen solltest du globale Variablen nicht benutzen, das bringt nur Ärger ...

Es geht hier offenbar um Debug-Ausgaben mit einstellbarem Tracelevel. Bei sowas kann man mit globalen Variablen leben, meine ich.

@Buddylove: Wozu der Link?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.10.2007, 18:54 Uhr
~Bloody Mary
Gast


@Buddylove: Wozu der Link?


Oooch, nur so... war gerade im Schreibrausch... :-)
und außerdem sollte in selbigem auch irgendwo die Antwort die der 'Kollege' gesucht hat stehen....


Frage: wie wärs mit private?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: