2017-01-04 22 views
-3

Ich beginne mit etwas Kontext.Wie rufe ich eine Funktion in einer Klasse aus einer anderen Klasse auf? (C++)

Machen Sie ein einfaches Spiel.

Ich habe zwei Klassen, eine namens BouncingBall, und die andere namens ASCIIRenderer. Ich habe eine Liste von Anweisungen zu folgen, aber einige der Anweisungen sind nicht ganz klar.

Die erste Anweisung war, einen Zeiger in BouncingBall mit dem Namen m_pRenderer zu erstellen und auf eine Elementvariable in ASCIIRenderer zu zeigen. Es wurde nicht angegeben, auf welche Member-Variable ich verweisen musste, und beide vorhandenen Member-Variablen waren privat, also habe ich meine eigene erstellt und sie als Renderer bezeichnet.

Zweite Anweisung (die ich brauche Hilfe) ist, wenn ich eine Funktion für die BouncingBall-Klasse schreibe SetPixel mit dem m_pRenderer, und mit drei Variablen als Parameter.

SetPixel ist der Name einer öffentlichen Funktion in der ASCIIRenderer-Klasse, und die Anweisung besagt, dass ich sie mithilfe des Zeigers irgendwie aufrufen muss.

Zusammenfassung: Ich muss die Funktion einer Klasse innerhalb der Funktion einer separaten Klasse mit einem Zeiger aufrufen.

Könnte mir jemand erklären, welche Syntax ich verwenden würde, um dies zu erreichen?

+1

'm_pRenderer-> setPixel (m_PositionX, m_PositionY (Ball); ' –

+0

Wenn ich das eintrage, erhalte ich einen Fehler unter dem m_pRenderer, die genaue Fehlermeldung lautet: Ausdruck muss einen Zeigertyp haben. – ShadowPrice57

+2

Dann sind Sie nicht der ersten Anweisung gefolgt, die besagt, dass Sie einen * Zeiger * namens 'm_pRenderer' erstellen sollen. –

Antwort

1

Basierend auf den von Ihnen angegebenen Details ist dies das, was ich gesammelt habe. Angenommen, die BouncingBall-Klasse würde die X- und Y-Position erhalten und die Funktion foo mit aufrufen, um die X- und Y-Werte für den Renderer festzulegen. Außerdem weiß ich nicht, wie Sie den Zeiger initialisieren werden, wie es oben nicht detailliert ist. Hoffe das hilft.

class BouncingBall 
{ 
    public: 
     void foo(int posX, int posY) 
     { 
      m_pRenderer->setPixel(posX, posY); 
     } 
    private: 
     ASCIIRenderer* m_pRenderer; 

}; 
0

Der Code I unten aufgeführt sind ein Beispiel einer Klasse, in diesem Fall Ball, einen Zeiger zu einer anderen Klasse hat, in diesem Fall Renderer, injiziert, und für die spätere Verwendung gespeichert.

Die Ball Klasse kann dann den öffentlichen Funktionen auf der Renderer Klasse rufen Sie die 'Pfeil' Syntax pointer->MemberFunction(arg1, arg2);

#include <iostream> 

class Renderer 
{ 
public: 
    /* Constructor and other functions omitted */ 
    void SetPixel(const int x, const int y) const; 
}; 

void Renderer::SetPixel(const int x, const int y) const 
{ 
    std::cout << "Set pixel: (" << x << ", " << y << ")" << std::endl; 
} 

class Ball 
{ 
public: 
    Ball(const Renderer *const renderer, const int posX, const int posY); 
    void Render() const; 
private: 
    const Renderer* _renderer; 
    int _posX; 
    int _posY; 
}; 

Ball::Ball(const Renderer *const renderer, const int posX, const int posY) 
    : _renderer(renderer), _posX(posX), _posY(posY) 
{} 

void Ball::Render() const 
{ 
    _renderer->SetPixel(_posX, _posY); 
} 

int main() 
{ 
    const Renderer renderer; 
    const Ball ball(&renderer, 10, 20); 

    ball.Render(); 

    return 0; 
} 

Die Ausgabe des Programms ist mit: Set pixel: (10, 20)

Verwandte Themen