我创建了“ Point”类,在2 Point对象和运算符“ <<”之间重载了运算符“ +”以显示Point对象。我无法编译和运行代码。 错误是没有匹配的运算符“ <<”。发生这种情况是“ cout <<“ p3:” <<((p1 + p2)<< endl;“
class Point {
public:
Point(int x=0, int y=0) : _x(x), _y(y) {};
Point operator +(Point &p);
int getX() {
return _x;
}
int getY() {
return _y;
}
friend ostream& operator <<(ostream& out, Point &p);
private:
int _x, _y;
};
Point Point::operator +(Point &p) {
Point np(this->_x+p.getX(), this->_y+p.getY());
return np;
}
ostream& operator <<(ostream &out, Point &p) {
out << '(' << p._x << ',' << p._y << ')';
return out;
}
int main() {
Point p1(1, 2);
Point p2;
cout << "p1: " << p1 << endl;
cout << "p2: " << p2 << endl;
cout << "p3: " << (p1+p2) << endl;
system("pause");
return 0;
}
答案 0 :(得分:2)
表达式
(p1+p2)
是一个右值。功能
ostream& operator <<(ostream &out, Point &p)
期望引用Point
。您不能将右值传递给此函数。更改为
ostream& operator <<(ostream &out, const Point &p)
在声明和定义中。
答案 1 :(得分:2)
C ++仅允许将临时变量传递给const引用。看到这个:How come a non-const reference cannot bind to a temporary object?
修改临时文件是没有意义的。您需要定义一个const引用,以保证您不会对其进行修改并延长其寿命。
答案 2 :(得分:1)
重载运算符时,const正确性不是可选的。以下是您需要的原型...
Point operator + (const Point &p) const;
friend ostream& operator <<(ostream& out, const Point &p);