static class
-
Hi,
wie kann ich eine Membervariable statisch machen, bei der es sich um eine Klasse handelt?
class CBar { // ... }; class CFoo { public: static CBar bar; // linker error }; CBar CFoo::bar = CBar(); // Noch immer Linker error
-
Die Klasse wird bereits erstellt wenn die Membervariablen initialisiert werden (afaik).
Wenn du es erst zu einem bestimmten Zeitpunkt brauchst würde ich es so machen:class CBar { // ... }; class CFoo { public: static CBar *pBar; }; CFoo::pBar = new CBar;
-
Da hast du wohl entweder vergessen eine Definition für deine static Variable zu machen oder du hast die Definition in einen Header geschrieben wodurch du dann mehrere Definitionen hattest. Da du keine Fehlermeldung angibst, lässt sich das nicht nachvollziehen. Denn eigentlich verhalten sich Klassenvariablen fast genauso wie die eingebauten Datentypen, daher geht das mit den static Membern in beiden Fällen gleich.
Hier ist ein Schema mit dem solche Probleme gar nicht auftreten können und das in fast allen Situationen in denen static Member gebraucht werden passt:
class foo{}; class bar{ static foo& static_foo(){static foo interner_wert(); return interner_wert;} }