Globale Variable in c++ für alle Klassen



  • Hallo Leute,
    ich habe ein Problem mit globalen Variablen.
    Ich habe in einer header datei eine globale Varable und eine Funktion die Strings ausgibt deklariert. Diesen Header binde ich bei mehreren Klassen ein, jedoch bekomme ich immer einen Fehler, dass die globale Variable schon in der Main, wo ich den header auch eingbunden habe, bereits deklariert ist.
    Anders kann ich die string ausgabe funktion nicht nutzen!
    Weiß jemand wie ich das mit der globalen varable richtig machen soll?


  • Mod

    Benutz keine globalen Variablen. Und keine Definitionen (denn nichts anderes hast du da gemacht) in Headern.

    (Wenn es unbedingt sein muss: Für sowas kann man 'extern' verwenden, aber tu da besser nicht).



  • Ich empfehle auch keine globalen Variabeln. Zeig uns mal ein bisschen Code und es wird sich bestimmt eine gute Lösung finden lassen.

    lg, freakC++



  • Globale Variablen sind mit Vorsicht zu genießen. Wenn du sowas trotzdem amchen willst kansnt du dir auchmal das Schlüsselwort extern ansehen.



  • Ich verwende in einem meiner Projekte eine Singleton-Klasse, welche die "unvermeintlich globalen" Variablen hält.



  • Ist die Lösung denn wirklich besser? Ist es nicht völlig egal, ob ich nun den Global Scope benutze oder einen Singleton? Den Singleton muss man ja schließlich auch mindestens einmal "extern" machen.

    Gruß



  • theliquidwave schrieb:

    Ist die Lösung denn wirklich besser? Ist es nicht völlig egal, ob ich nun den Global Scope benutze oder einen Singleton? Den Singleton muss man ja schließlich auch mindestens einmal "extern" machen.

    Gruß

    Das schöne an Singletons ist halt, dass der Zeitpunkt der Erzeugung genau definiert ist. (Ok, kommt auf die Implementierung an, aber ich denke da z.B an Meyers). Und je nachdem, wenn das Singleton weiter entwickelt ist kannst du sogar die Zerstötrung recht geneu beeinflussen und ev. das Singleton nachdem es zerstört ist wieder zum leben erwecken. 😉

    Rein Designtechnisch ist es dasselbe, aber in der Implementierung sind imo Singletons einiges besser, als globale Variablen.



  • drakon schrieb:

    theliquidwave schrieb:

    Ist die Lösung denn wirklich besser? Ist es nicht völlig egal, ob ich nun den Global Scope benutze oder einen Singleton? Den Singleton muss man ja schließlich auch mindestens einmal "extern" machen.

    Gruß

    Das schöne an Singletons ist halt, dass der Zeitpunkt der Erzeugung genau definiert ist. (Ok, kommt auf die Implementierung an, aber ich denke da z.B an Meyers). Und je nachdem, wenn das Singleton weiter entwickelt ist kannst du sogar die Zerstötrung recht geneu beeinflussen und ev. das Singleton nachdem es zerstört ist wieder zum leben erwecken. 😉

    Rein Designtechnisch ist es dasselbe, aber in der Implementierung sind imo Singletons einiges besser, als globale Variablen.

    Singletons geleten als Beispiel für Anti-Patterns. Ich halte davon nichts und gerade bei MT-Anwendungen wird es ekelig.



  • uiouiou schrieb:

    Singletons geleten als Beispiel für Anti-Patterns. Ich halte davon nichts und gerade bei MT-Anwendungen wird es ekelig.

    Ich habe keiner Weise gewertet, ob Singletons gut oder nicht sind und das möchte ich auch nicht tun. (Es gibt zu genüge Diskussionen darüber).
    Es war nur ein Vergleich zu globals.


Anmelden zum Antworten