我已经制作了一个Point类here。当我写
时,一切正常cout << p1 << endl; //which p is a Point
但当我有两个Point对象并写
时cout << (p1 + p2) << endl; //or (p1 - p2) and etc...
我收到错误。你可以在这里看到错误。我不知道原因。请帮忙。
答案 0 :(得分:4)
您的问题是您试图将rvalue传递给接受非const左值引用的函数。这是invalid。要解决此问题,只需通过const引用获取Point
参数:
ostream &operator<<(ostream &output, const Point &p);
答案 1 :(得分:3)
错误应来自输出操作员签名:而不是:
ostream &operator<<(ostream &output, Point &p){
output << '(' << p._x << ", " << p._y << ')';
return output;
}
你应该:
ostream &operator<<(ostream &output, const Point &p) { // notice const here
output << '(' << p._x << ", " << p._y << ')';
return output;
}
这是因为(p1 + p2)
返回一个临时的,需要绑定到 const 引用。
答案 2 :(得分:0)
Here已更正代码
您需要添加const
说明符,例如
ostream &operator<<(ostream&, const Point&);
它是offtopic,但你的输入不适用于输出,因为你读了两个用空格分隔的双打,但输出括号和逗号。