2016-06-14 6 views
0

input.cpp Funktion, die den Fehler hatWie kann ich auf die Adresse zugreifen, auf die ein Mitglied einer Klasse in der Klasse verweist?

void Input::isKeyPressed() 
{ 

    if (sf::Keyboard::isKeyPressed (sf::Keyboard::S)) 
    { 
     // Here's The Error 
     *Input::playerOne.move(0.0 , 1.0); 

    } 

} 

Details

Diese Funktion ist die Implementierung der Klasse Eingang und die Klasse hat eine private Variable für einen Zeiger auf die sf :: RectangleShape in der int main() des Programms.

Ich versuche, auf diese Instanz von sf :: RectangleShape zuzugreifen, um das Objekt auf dem Bildschirm nach unten zu verschieben. Ich möchte keine globale Variablenklasse erstellen, nur um das zu erreichen. Ich möchte nur auf diese Methode für dieses spezifische Objekt zugreifen können.

+1

'(* Eingabe :: playerOne) .move()' ' – Kiskae

+4

playerOne-> move (0.0, 1.0);' (Und Sie sollten ein [Buch] Abholung berücksichtigen (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list).) – molbdnilo

+0

@molbdnilo Ich würde ein Buch aufheben, aber ich habe bereits ein solides Verständnis von C++. Es ist nur in Bezug auf Klassen, dass ich besser werden muss. Ich bin fast 17 und lebe in Großbritannien. Im September werde ich mein zweites Jahr auf dem College beginnen und werde viel OOP machen und so werde ich meine Fähigkeiten verbessern. C++ war meine erste jemals verwendete Programmiersprache. Ich habe mich selbst unterrichtet und liebe die Sprache absolut. Trotzdem kann ich verstehen, warum Leute C++ nicht als Startsprache empfehlen. –

Antwort

2

Sie müssen den Zeiger auf Member Betreiber:

Input::playerOne->move(0.0, 1.0);

Die explizite Bereichsauflösungs Input:: nicht erforderlich ist, Sie zu

playerOne->move(0.0, 1.0);

+0

Es befindet sich in einer anderen Datei als die Klassendefinition. Die Klassendefinition befindet sich in input.h. Ich mache die Implementierung in der Eingabe.cpp. –

+1

Das ist egal. Der * Präprozessor * ersetzt den Inhalt von 'input.h' durch' # include.h' und der * Compiler * kompiliert die einzelne Datei. – Bathsheba

+0

Dann ist der Code :: Blöcke IDE Autocompete/suggest ist insgesamt bollocks –

-1

Sie versuchen, die Verwendung könnte neu schreiben können dieser Zeiger

this->playerOne.move(...) 

Er verweist direkt auf sich selbst

+0

Dies würde nicht funktionieren, weil '.' ist kein gültiger Operator auf einem Zeiger. Wie auch immer, unqualifizierte Namen werden trotzdem im Klassennamensraum gesucht, ohne 'this ->' enthalten zu müssen. Es ist nur in wenigen Fällen erforderlich, meist mit Vorlagen. Einige Leute verwenden es als eine optionale Stilwahl (z. B. anstelle von "m_" Präfixen für Mitgliedsvariablen). –