向下选民:我知道这是一个构造不良的问题。如果你向下滚动到答案,你会发现我发现了问题的根源。虽然这个问题本身可能没什么帮助,但我希望这个答案可以帮助那些遇到运算符重载问题的人。问题在于它是什么;我无法确定任何可以使这个问题变得更好的编辑或修订。因此,如果您要提交投票,请添加建设性意见。谢谢。
我正在运行以下代码
myObject o = myObject();
cout << o << endl;
我的(friend
)&lt;&lt;运算符在这里超载:
ostream& operator << (ostream& s, myObject o)
{
s << doStuff(o, s) << endl;
return s;
}
预期产出:
object contents
由于某种原因,实际输出包括内存地址:
5452ED48object contents
为什么?
答案 0 :(得分: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
您似乎必须了解通过引用传递值,因为当您使用“&lt;&lt;”操作符重载时不返回任何值,您将在参数中返回值。
答案 1 :(得分:0)
很抱歉没有提供足够的细节。事实证明我应该这样做:
doStuff(o, s);
return s;
显然我正在将所需的输出附加到已包含地址的s
。