-3

反対票を投じた方へ:これは不十分に構成された質問であったことを理解しています。答えまで下にスクロールすると、問題の原因を発見したことがわかります。質問自体は役に立たないかもしれませんが、答えがオペレーターのオーバーロードで同様の問題を経験している誰かに役立つことを願っています。問題はそれが何であったかでした。これをより良い質問にする編集や改訂を特定することはできません。したがって、反対票を提出する場合は、建設的なコメントも追加してください。ありがとうございました。


私は次のコードを実行しています

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

私の(friend)<<演算子はここでオーバーロードされています:

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

期待される出力:

object contents

実際の出力は、何らかの理由で、メモリアドレスを含みます。

5452ED48object contents

なんで?

4

2 に答える 2

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

出力:

1 1

「<<」演算子のオーバーロードを使用すると値が返されず、引数に値が返されるため、参照による値の受け渡しについて学ぶ必要があるようです。

于 2012-04-15T02:33:18.140 に答える
0

詳細が不十分で申し訳ありません。私はこれを行うべきだったことが判明しました:

doStuff(o, s);
return s;

sどうやら、すでにアドレスが含まれている に目的の出力を追加していたようです。

于 2012-04-15T03:17:24.317 に答える