Problem mit Klassen(rechte?)
-
Hoffe mein Problem ist klar geschildert.
Nein ist es nicht.
Bring doch bitte relevanten Code. Kann auch Beispiel Code sein, aber bitte so realitätsnahe, wie möglich.
CCycle leitet von CBase ab, oder enthält es eine Instanz?
Und man schreibt voraus und nicht vor_raus!
-
ice schrieb:
Eine Instanz wird noch erzeugt, aber wie kann ich auf diese im Prinzip schon im v****** zugreifen?
Gar nicht. Wie willst du auf etwas zugreifen, das noch nicht existiert? Der Compiler kann nicht in die Zukunft schauen

Wenn die Methode von den Instanzen unabhängig ist, nimm wie gesagt
static. Ansonsten hast du einen Designfehler.
-
Ja, vielleicht ein Design- bzw. Denkfehler.
Es gibt während der Laufzeit immer nur eine Instanz von Base.
In der Instanz gibt es die 6 Pointer. Jeder zeigt auf einen Spieler.
Und ein Int speichert den Index des Spieler, der an der Reihe ist.Nun will ich in anderen Klassen auf den Pointer des aktuellen Spielers zugreifen.
(Wie) Kann ich das realisieren?
-
Setz den Pointer doch bei der Initialisierung auf
NULL. Sobald du einen zugehörigen Spieler erstellt hast, kannst du mitnewSpeicher dafür reservieren.Für die 6 Spieler kannst du ein Array anlegen, und den Index nach jedem Zug erhöhen. Per Modulo überprüfst du, ob der letzte bereits dran war, und gehst wieder zum ersten.
Aber wieso meinst du, sollte man auf die noch nicht erstellten Instanzen im Voraus zugreifen können?
-
Es gibt ja nur eine Instanz und auf diese will ich eben zugreifen.
Deine Ideen sind ja klar, ist soweit auch verwirklicht. Das erklärt leider nicht meine Frage.Ich will in anderen Klassen z.B.
base_inst->cur_player->set_money(200);
aufrufen.
Ich will halt mit der Methode cur_player in anderen Klassen arbeiten.
-
So in etwa vielleicht?
class CPlayer { public: CPlayer(); void setVal(int val); int getVal(); //... private: //... }; //irgendwo im globalen scope CPlayer& getPlayerInstance() { static CPlayer player; return player; } //irgendwo anders void SomeClass::someFunctNeedsPlayers() { getPlayerInstance().setVal(42); }
-
ice schrieb:
Es gibt ja nur eine Instanz und auf diese will ich eben zugreifen.
Deine Ideen sind ja klar, ist soweit auch verwirklicht. Das erklärt leider nicht meine Frage.Vorher hast du noch gesagt, du willst drauf zugreifen bevor es die eine Instanz überhaupt gibt. Musst dich entscheiden:
- mach alle Attribute und methoden statisch, dann kannst du darauf zugreifen ohne jemals eine Instanz erzeugen zu müssen
- oder implementiere die Klasse als Singleton (google nach wenn dir das nichts sagt), bei dem die einzige instanz erstellt wird sobald der erste Zugriff kommt.
-
Außerdem ist es doch kein Problem mal fix ne Klasse zu basteln die im Prinzip leer ist und von einer anderen abgeleitet ist. Das is ne Sache von 5min...
-
It0101 schrieb:
Außerdem ist es doch kein Problem mal fix ne Klasse zu basteln die im Prinzip leer ist und von einer anderen abgeleitet ist. Das is ne Sache von 5min...
Ich verstehe leider nicht, was du damit sagen willst.
Und die mit dem alles als static deklarieren würde schon funktionieren, ist das aber dann wirklich eine "schöne" Lösung?
Das ganze wird später benotet...Das Singelton schau ich mir mal an.
Wobei die Lösung von Tachyon ja eig ganz gut aussieht.
Kann ich dann in anderen Klassen die Variable "player" auch verändern?
-
ice schrieb:
Kann ich dann in anderen Klassen die Variable "player" auch verändern?
Ja, du müsstest sie dann aber als Referenz und nicht als Kopie zurückgeben.