2012-04-03 2 views
0

Ich versuche es so zu machen, ich habe ein Objekt, das einen Zeiger hat, so dass mehrere Klassen mit dem gleichen Objekt arbeiten können. Aber das einzige, was es mir gibt, ist 1 anstelle der hexadezimalen Adresse, die ich brauche. Mein Code:Pointer-Adresse gibt eine 1 statt hexadezimale Adresse

Code, es zu schaffen:

SDL_Event event; 
EventHandler eh(&event); 

Code es mit:

EventHandler::EventHandler(SDL_Event* eventpointer) 
{ 
    EventHandler::event = eventpointer; 
    //This code is to test the pointer: 
    std::cout << &EventHandler::event << std::endl; 
} 

Ausgang:

1 
Process returned 0 (0x0) execution time : 0.092 s 

Antwort

3

Versuchen Sie, den Wert Druck des Ereignisses, nicht die Adresse davon:

std::cout << EventHandler::event << std::endl; 

Es gibt tatsächlich einige ungewöhnliche Dinge über Ihren Testfall. Korrektur alle von ihnen, habe ich am Ende mit auf den Punkt:

EventHandler::EventHandler(SDL_Event* eventpointer) : event(eventpointer) 
{ 
    //This code is to test the pointer: 
    std::cout << event << "\n"; 
} 

Die Dinge, die ich sind geändert:

  • Bevorzugen Initialisierung Listen Werte in Konstruktor Körper Zuordnung
  • Druckwert event Variable nicht seine Adresse . Der Wert event ist der gleiche wie der Wert eventpointer, der der Adresse des ursprünglichen SDL_Event Objekts entspricht.
  • Vermeiden Sie den Bereichsqualifizierer. Innerhalb der Klassenfunktionen können Sie sich auf Mitglieder einfach mit Namen beziehen.


Neben: Ich werde die eigentliche Frage in einem beiseite zu beantworten, da es auf die wahre Absicht des Autors irrelevant erweist. Der tatsächliche Grund, warum er 1 anstelle eines Zeigerwerts sieht, ist dies: Er versucht, den Wert eines Zeiger-zu-Mitglieds zu drucken. operator<< hat keine Überladung, die ein Zeiger-zu-Mitglied nimmt, also wandelt es stattdessen zu bool um. Sein Ausdruck ist nicht null, also ergibt die Umwandlung true, die als 1 gedruckt wird.

+0

Danke! (Ich lerne immer noch C++) – user1311122