Klassenübergreifend Funktionen ausführen



  • Hallo,
    Ich werde versuchen mein Problem so verständlich darzustellen wie möglich:
    Ich habe zwei Klassen (Objekte). Beispiel: Es geht um eine Spielfigur, die man mit der Funktion 'Feld' an einen bestimmten Platz setzen kann.

    class CFigur
    {
        void Feld(int x)
    };
    

    Das ganze wird nun instantiiert als

    CFigur Figur[2];
    

    Ich weiß, dass ich die Funktion 'Feld' aufrufe beispielsweise mit

    Figur[0].Feld(2);
    

    Nun habe ich aber noch eine Objektklasse für den Cursor, bei einem bestimmten Klick soll eben eine Figur auf ein anderes Feld gesetzt werden.

    class CCursor
    {
        void Klick(int x, int y) //Klick zB mit Parametern der Koordinaten
    };
    

    Jetzt kommt die eigentliche Frage: Kann ich in der Funktion 'Klick' auf die Klasse CFigur, besser gesagt auf eine bestimmte Instanz der Klasse zugreifen, und eben in dieser Instanz eine Funktion ausführen?
    Bsp:

    CCursor::Klick(int x, int y)
    {
       Figur[0].Feld(2)
    }
    

    Mir ist klar, dass der letzte Abschnitt nicht funktioniert (das ist eben mein Problem 😉 ) Natürlich meckert der Compiler, da die Klassendefinitonen noch nichts von den (später) erstellten Instanzen wissen.
    Aber ich denke es wird so klar, was ich mir vorstelle.
    So, puh, viel Text, aber wie gesagt ich glaube sonst versteht niemand, wovon ich rede und was ich überhaupt will..
    Nun die Frage nochmal in aller Kürze: Ist es generell möglich, innerhalb einer Klasse eine Funktion einer Instanz einer ganz anderen Klasse auszuführen?



  • Du brauchst irgendwie Zugriff auf die Instanz...

    Entweder du übergibst sie, oder sie ist member der Klasse, oder oder oder... Weit mehr kenne ich mich auch nicht aus.

    zB:

    CCursor::Klick(CFigur figur, int x, int y) 
    { 
       figur[0].Feld(2) 
    }
    

    oder:

    class CCursor 
    {
        CFigur figur[2];
    public:
        CCursor();
        ~CCursor();
    
        void Klick(int x, int y);
    };
    

    MfG



  • CCursor::Klick(CFigur * figur, int x, int y) 
    { 
       figur[0].Feld(2) 
    }
    

    oder

    CCursor::Klick(CFigur figur[2], int x, int y) 
    { 
       figur[0].Feld(2) 
    }
    

    Sonst funktioniert das nicht, wobei ich nicht weiß ob die 2. Methode ok ist.



  • Ich bedanke mich sehr herzlich bei euch für die rasche Hilfe!
    Funktioniert einwandfrei, so habe ich mir das vorgestellt!

    Grüße


Anmelden zum Antworten