没有与“操作员<<”匹配的内容?

时间:2019-04-15 14:21:00

标签: c++ c++11

我编写了一个使用结构的程序,允许用户输入一个点,然后输出该点,但是当我运行该程序时,它给了我错误:main.cpp:19:10:error:不匹配'operator <<'(操作数类型为'std :: ostream {aka std :: basic_ostream}'和'Point')      cout <<结果;

这是什么意思?

#include <iostream>
using namespace std;

struct Point {
    double x, y;
};

// get a point from user input
Point input_point() {
    double x, y;
    cin >> x >> y;
    Point p = {x, y};
    return p;
}

int main() {
    Point result;
    result = input_point();
    cout << result;
}

1 个答案:

答案 0 :(得分:4)

您可以像这样重载运算符:

std::ostream& operator<< (std::ostream& stream, const Point& p) {
     stream << "[" << p.x << ", " << p.y << "]";
     return stream;
}

您的结果将是这样的:

[1, 2]

基本上,重载的函数应该获取流和对象的引用,然后它必须实现逻辑以打印对象(例如,通过打印其成员),然后应再次将引用返回给流。


以下是修改后的程序,显示了在何处插入函数:

#include <iostream>
using namespace std;
struct Point {
    double x, y;
};

 std::ostream& operator<< (std::ostream& stream,  const Point& p) {
     stream << "[" << p.x << ", " << p.y << "]";
     return stream;
}
// get a point from user input
Point input_point() {
    double x, y;
    cin >> x >> y;
    Point p = { x, y };
    return p;
}

int main() {
    Point result;
    result = input_point();
    cout << result;
}