2012-04-15 8 views
-3

Zu den Down-Wähler: Ich verstehe, dass dies eine schlecht konstruierte Frage war. Wenn Sie zu den Antworten blättern, werden Sie feststellen, dass ich die Ursache des Problems gefunden habe. Obwohl die Frage selbst vielleicht nicht hilfreich ist, hoffe ich, dass die Antwort jemandem helfen wird, ähnliche Probleme mit dem Überladen von Operatoren zu haben. Das Problem war, was es war; Ich kann keine Änderungen oder Überarbeitungen feststellen, die dies zu einer besseren Frage machen würden. Wenn Sie also eine Abstimmung nach unten abgeben möchten, fügen Sie bitte auch einen konstruktiven Kommentar hinzu. Vielen Dank.Overloaded << Operator Printing Adresse


Ich bin mit dem folgenden Code

myObject o = myObject(); 
cout << o << endl; 

My (friend) < < Betreiber hier überlastet ist:

ostream& operator << (ostream& s, myObject o) 
{ 
    s << doStuff(o, s) << endl; 
    return s; 
} 

Erwartete Ausgabe:

object contents 

Actual ausgegeben wird, aus irgendeinem Grund, einschließlich der Speicheradresse:

5452ED48object contents 

Warum?

+3

Was ist 'doStuff()'? Apropos. Klopf von all dem "myObject o = myObject();" Geschäft. "Mein Objekt o;" ist ausreichend. –

+0

@BenjaminLindley: 'myObject o' ist möglicherweise nicht ausreichend, wenn' myObject' POD ist. – Nawaz

+1

Nicht genügend Informationen, Abstimmung für das Schließen. – Nawaz

Antwort

0

Entschuldigung, dass Sie nicht genug Details zur Verfügung stellen. Es stellte sich heraus, dass ich das getan haben sollte:

doStuff(o, s); 
return s; 

Anscheinend war ich die gewünschte Ausgabe zu s anhängt, die bereits die Adresse enthalten.

0

Wir können nicht verstehen, was Sie tun wollen ... ich so etwas wie dies zu verstehen:

#include <iostream> 
using namespace std; 

class obj{ 

    friend ostream&operator<<(ostream &out, const obj o); 
public: 
    obj(int a); 
    int change_data(); 
private: 
    int s; 
    int d; 

}; 

obj::obj(int a) 
{ 
    s = a; 
    d = s; 
} 

int obj::change_data() 
{ 
    return 99; 
} 

ostream&operator<<(ostream &out, const obj o){ 
    out << o.s; 
    out << " "; 
    out << o.d; 
} 

int main(int argc, char **argv) { 
    obj some(1); 
    cout << some; 
    return 0; 
} 

Ausgang:

Es scheint, Sie lernen müssen über das Übergeben von Werten als Referenz, denn wenn Sie den Operator "< <" überladen verwenden, geben Sie keinen Wert zurück, sondern geben Werte zurück das Argument.