Element einer Klasse soll auf diese zugreifen



  • 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);
    


  • A ist einfach die Verwalterklasse von B . Und wenn ein B geupdated wird, muss A auch geupdated werden.
    Im Prinzip ist die updated Variable in B sinnlos. Fällt mir erst jetzt ein, aber es ist zur wichtig, ob ein B geupdated wurde.

    Und wie schon gesagt, kann ich nicht alle durchlaufen. Das würde zu lange dauern.

    Und es könnte durchaus sein, dass B noch weitere Funktionen in A aufrufen 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. B muss aus eigener Kraft auf sein A zugreifen 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.


Anmelden zum Antworten