C++ Newbie: wie funkt. public static variablen ?
-
Hallo!
Ich bin ein C++ Newbie bzw. ich hab schon relativ viel programmiert aber ab und zu stoße ich immer noch auf "Noob"-Probleme die in keinem Tutorial beantwortet werden.
Ganz einfach, ich möchte folgendes tun:
In meiner main.cpp will ich eine variable definieren die von ÜBERALL, also von jeder klasse aus, angesprochen werden kann.
Ich habe da folgendes gemacht (in main.cpp):
public static string MyStaticString="Bla";aber da kriege ich die Fehlermeldung:
"error: expected unqualified-id before "public""Wenn ich das public weglasse, dann geht das zwar, aber die Variable kann ich nicht in meinen Klassen verwenden, dann heißt es
"error: `pApplicationPath' was not declared in this scope"also was mache ich falsch? Wie definiere ich so eine "globale" Variable richtig?
Danke!

-
Wenn es ein statischer Klassenmember ist, dann mußt du auch die entsprechende Klasse angeben:
Blubb::Blubb() { string xyz = Main::MyStaticString; }Generell ist so ein Vorgehen aber sehr problematisch, da du dann zwischen den einzelnen Klassen unnötige Abhängigkeiten erzeugst (insbesondere wenn du Bottom-Up-Zugriffe programmierst, d.h. von untergeordneten Klassen auf Hauptklassen).
Als weiteres Suchstichwort kann ich dir "Singleton" empfehlen.Edit: jetzt hast du ja deinen Originalbeitrag editiert ... grmpf -(
Die Deklaration und Definition eines statischen Klassenmembers geschieht an zwei Stellen:
// in main.h class Main { public: static std::string MyStaticString; }; // in main.cpp std::string Main::MyStaticString = "Toller Text!";
-
hu erstmal danke für die schnelle Antwort. Sorry du hast schneller geantwortet als ich editieren konnte

Hm also zunächst mal habe ich weder eine main.h noch eine klasse main. Ich hab ein windows GUI projekt in meiner IDE geöffnet, da gibt es garkeine Klasse sondern nur eine methode WinMain.
Ich kann aber in der main.cpp variablen definieren obwohl da keine klasse ist. Nur wenn ich sie public mache meckert der Compiler.
-
Das liegt daran dass "public" auf globaler Ebene nichts verloren hat.
Dein Problem dürfte sein, dass die Variable ausserhalb von main.cpp einfach nicht bekannt ist. Um das zu ändern, musst Du die Variable in anderen Übersetzungseinheiten deklarieren (mit "extern"). Und genau das macht man normalerweise in einer .h-Datei.
Stilfragen lasse ich mal aussen vor.
-
Danke ich hab das jetzt anders gelöst. Das mit den statischen Variablen ist wirklich nicht besonders schön.
Danke!