gpt4 book ai didi

c++ - << C++ 中的运算符重载错误

转载 作者:行者123 更新时间:2023-11-30 02:49:03 24 4
gpt4 key购买 nike

我是 C++ 初学者,正在尝试从在线视频中学习。在讲座中的运算符重载示例中,存在以下代码并给出错误

 error: no match for 'operator<<' in 'std::cout << operator+(((point&)(& p1)), ((point&)(& p2)))'compilation terminated due to -Wfatal-errors.

在标有注释的行上。有人可以告诉我代码中有什么问题吗?我只是在尝试教授在讲座中解释的内容,但无法编译。

===============

#include <iostream>
using namespace std;


class point{
public:
double x,y;
};

point operator+ (point& p1, point& p2)
{
point sum = {p1.x + p2.x, p1.y + p2.y};
return sum;
}

ostream& operator<< (ostream& out, point& p)
{
out << "("<<p.x<<","<<p.y<<")";
return out;
}


int main(int argc, const char * argv[])
{
point p1 = {2,3};
point p2 = {2,3};
point p3;
cout << p1 << p2;

cout << p1+p2; // gives a compliation error
return 0;
}

最佳答案

这只是 const 正确性的问题。你的 operator+ 返回一个临时的,所以你不能绑定(bind)一个非 const调用时引用它 operator<< .签名:

ostream& operator<< (ostream& out, const point& p)

虽然您不需要这样做来修复此编译错误,但您将无法添加 const点,除非你修复 operator+同样:

point operator+(const point& p1, const point& p2)

关于c++ - << C++ 中的运算符重载错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21592608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com