2012-04-15 17 views
-3

ダウン投票者に:これは構成が不十分な質問でした。答えにスクロールすると、問題の原因を発見したことがわかります。質問そのものは役に立たないかもしれませんが、回答がオペレータの過負荷と同様の問題を経験するのに役立つことを願っています。問題はその問題だった。私はこれをより良い質問にする編集や改訂を特定することはできません。したがって、ダウンボートを提出する場合は、建設的なコメントも追加してください。ありがとうございました。オーバーロード<<オペレータの印刷住所

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

予想される出力:

object contents 


私は

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

私は(friend)< <オペレータが、ここでオーバーロードされ、次のコードを実行していますよ

実際の出力は何らかの理由でメモリアドレスを含む:

5452ED48object contents 

なぜですか?私たちは、あなたがしたいのか理解できません

+3

'doStuff()'とは何ですか?ところで。すべてのことをノック "myObject o = myObject();"ビジネス。 "myObject o;"十分なものです。 –

+0

@BenjaminLindley: 'myObject'がPODの場合は' myObject o'では不十分です。 – Nawaz

+1

閉鎖のための投票に十分な情報がありません。 – Nawaz

答えて

0

ご迷惑をおかけして申し訳ございません。それは私がこれを行っている必要があることが判明:

doStuff(o, s); 
return s; 

どうやら私はすでにアドレスが含まれていsに所望の出力を追加しました。

0

...私はこのような何かを理解:

#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; 
} 

出力:

学ぶためにあなたにしているようです参照渡しの値については、 "< <"演算子のオーバーロードによって値が返されない場合は、議論。

関連する問題