Problem mit Klasse, Konstruktor und Pointern



  • Hi Leute,

    Vorweg: Ich hab die Codes ausm Kopf geschrieben, also sind sie weder lauffähig noch frei von formalen Fehlern...
    Ich verwende eine Klasse test mit dem Standardkonstruktor test(player *player). Die Klasse Player ist noch nicht vorhanden wenn ich die Klasse test erzeugen möchte, daher möchte ich nur einen Pointer auf eine Klasse Player übergeben, welcher dann später mit Leben gefüllt wird. Also etwa so:

    class player
    {
    /* [...] */
    void kill();
    /* [...] */
    };
    
    class test
    {
    public:
    test(player *user)
    {
    _p_user = user;
    }
    /* [...] */
    void update(void)
    {
    _p_user->kill(); // <<< hier erhalte ich Fehler, dass p_user kein richtiger Pointer ist, wieso?
    }
    
    private:
    player* _p_user;
    };
    
    class player *temp;
    
    class test* main = new test(temp);
    
    temp = new player;
    
    main->update();
    

    Wenn ich nun versuche auf _p_user innerhalb von main zuzugreifen erhalte ich immer nur Fehler. Was mache ich falsch? Kann ich hier const sinnvoll einsetzen?

    Gruß
    Scarabol



  • class player *temp; 
    
    // temp ist hier nicht initialisiert und wird dann sogar bei der übergabe kopiert. -> kann nicht gehen.
    class test* main = new test(temp); 
    
    temp = new player; 
    
    main->update();
    

    Auf diese Art sollte das dann funktionieren.

    class player *temp = new player;
    
    class test* main = new test(temp); 
    
    main->update();
    

    BTW: delete nicht vergssen.

    Kann ich hier const sinnvoll einsetzen?

    Da musst Du schon konkreter werden.



  • Hi, danke für die Antwort

    Problem ist das ich new player erst NACH new test aufrufen kann 😞

    Kann ich das nicht mit Pointern lösen?
    Das der Pointer bei der Übergabe kopiert wird kann doch verhindert werden, oder? Indem ich einfach nen Pointer auf den Pointer übergebe, oder nicht?

    Vielleicht sollte ich auch mit einer init Funktion arbeiten, dann könnte es klappen. Daher noch eine andere Frage kann ich selber einen Debugger Fehler erzeugen alla "Ungültige Verwendung init() wurde noch nicht aufgerufen"?

    Gruß
    Scarabol



  • Das der Pointer bei der Übergabe kopiert wird kann doch verhindert werden, oder? Indem ich einfach nen Pointer auf den Pointer übergebe, oder nicht?

    Ja. Oder C++ mässiger einer Referenz auf einen Pointer.

    Eine Alternative ist auch eine Methode um den Player zu setzen:

    class test* main = new test; 
    class player *temp = new player; 
    main->setPlayer(temp);
    
    main->update();
    

    BTW: deine variablen namen sind alles andere als selbsterklärend.



  • ok, alles klar danke, ich werd dann wohl noch einige Methoden alla init() und set..() integrieren, vielen Dank

    Gruß
    Scarabol



  • Nice site. Thank you.,


Anmelden zum Antworten