Element einer Klasse soll auf diese zugreifen
-
Ich habe zwei Klassen.
AundBIn Klasse
Agibt es mehrere Elemente der KlasseB.
Jetzt suche ich nach einer Möglichkeit in B auf A zuzugreifen, allerdings ohne- einen Zeiger der Klasse
Ain KlasseBeinzurichten, der bei der Instanzierung einen Verweis der Basiklasse enthält, weil das aufgrund einenes Arrays ausBnicht möglich ist und eine nachträgliche Zuweisung nicht funktioniert. Aber vorallem aus Speichergründen. - einen statischen Zeieger der Klasse
Aeinzurichten, da ich mehrere Instanzen von KlasseAhabe.
Kennt jemand eine Lösung für mein Dilemma???
- einen Zeiger der Klasse
-
Du gibst dem B, das ein A braucht das passende A?
-
Geht nicht.
Bmuss selbstständig aufAzugreifen.
Leider...Sonst wäre das auch kein Problem.
Aber ihr könnt es euch so vorstellen:
In B wird etwas aktualiert.
=>
die Variablebool updatedwirdtrue. (Muss nicht unbedingt sein!)
Jetzt ist es ganz wichtig, dass inAebenfalls die Variablebool updatedtruewird.
=>
Bmuss inAdie Variableupdatedauf true setzten.Es wäre zu aufwendig in
AalleB's durchzulaufen.Ich hoffe ihr könnt das verstehen.
-
Ne, versteh ich nicht. Sind das Eigenschaften der Klasse? Eigenschaften der Objekte? Wenn du das Problem nicht präzise beschreiben kannst, dann gib etwas Kontext, dann können wir zumindest raten was du da machen willst.
-
Ich machs mal an nem Codebeispiel anschaulich:
class A { public: B b_instanzen[2][4]; bool updated; A() { updated = false; } void update() { updated = true; } bool check() { bool tmp = updated; updated = false; return tmp; } };class B { public: bool updated; B() { updated = false; } void update() { updated = true; // Soll jetzt hier irgendwie die update-Funktion im zugehörigen A aufrufen! } bool check() { bool tmp = updated; updated = false; return tmp; } };Ich hoffe, das ist jetzt klar.
Die zwei ausgeschlossenen Möglichkeiten bleiben bestehen.
-
Da musst du natürlich jedes B Objekt durchgehen und update aufrufen, was denn sonst? Allerdings: Wenn klar ist, dass alle member B geupdated sind wenn A geupdated ist, wozu haben die dann überhaupt eine eigene updated Eigenschaft? Insgesamt sehe ich das Problem immer noch nicht, die Lösung ergibt sich eigentlich eindeutig aus dem Kontext..
-
Du musst doch über ein Objekt der Klasse A zugreifen, oder? Also etwa:
A var; var.b_instanzen[0][0].update();Warum kannst Du dann nicht der update-Methode eine Referenz auf das A-Objekt mitgeben:
class B { [...] void update(A &papa) { updated = true; papa.update(); // Soll jetzt hier irgendwie die update-Funktion im zugehörigen A aufrufen! } [...] }; A var; var.b_instanzen[0][0].update(var);
-
Aist einfach die Verwalterklasse vonB. Und wenn einBgeupdated wird, mussAauch geupdated werden.
Im Prinzip ist dieupdatedVariable inBsinnlos. Fällt mir erst jetzt ein, aber es ist zur wichtig, ob einBgeupdated wurde.Und wie schon gesagt, kann ich nicht alle durchlaufen. Das würde zu lange dauern.
Und es könnte durchaus sein, dass
Bnoch weitere Funktionen inAaufrufen können muss.//EDIT//
An Belli:
Das geht nicht, weil ich nicht kontrolieren kann von wo aus auf die Funktion zugegriffen wird, weshalb ich keine Refferenz übergeben kann.
Bmuss aus eigener Kraft auf seinAzugreifen können!
-
Hä? Das System ist doch total simpel, und so wie beschrieben ist die einzige Möglichkeit für alle A auch update() aufzurufen. Da gibt es kein Weg drum herum. Du musst das Design ändern für einen anderen Weg, aber ob und wie das geht kann man ohne Kontext nicht beantworten.
Insofern gleiche Ansage wie oben: Beschreibe, großzügig, was du machen willst und nicht wie.
-
Ich hab die Lösung.
Es wäre zu kompliziert das jetzt hier zu beschreiben, da das Projekt zu groß ist, um es kurz zu halten.Wenn es sein muss, dann erkläre ich was ich jetzt machen, wenn nicht, dann halt nicht.
-
Ja, bitte, erklär mal.
-
Das eigentliche Problem war, dass ich die ID des Blocks ändern musste.
Aber wenn ich das tue, dann muss der Chunk geupdated werden. Aber die Funktion zum ändern der Id ist im Block selbst.Also habe ich der Welt eine Funktion gegeben, mit der man die ID ändern kann.
Problem gelöst.
-
Kanns sein, dass du Minecraft nachbauen willst?

-
Nein.
Wenn überhapt "nachbauen", dann Brick Force, wobei ich das eher als Verbessern bezeichnen würde.