请问重载流插入运算符<<怎么不能识别定义的类?

大佬们帮忙看看。重载了<<和自增运算符,用来输出自己定义的Point类,前缀++正常输出,后缀++报错:
没有与这些操作数匹配的"<<"运算符,操作类型为ostream<<Point。但是p++的返回值就是Point啊?
代码如下:

//通过重载实现点类的自增自减和输出

#include <iostream>


using namespace std;


class Point
{
    int _x, _y;
public:
    Point(int x, int y) :_x(x), _y(y) {}
    Point& operator ++();//前置++不需要参数
    Point operator ++(int);//后置++需要参数来作为标志
    Point& operator --();
    Point operator --(int);
    friend ostream& operator << (ostream& o, Point& p);
};
Point& Point:: operator ++ ()
{
    _x++;
    _y++;
    return *this;
}
/* ++i在c++的定义最后返回的是对象的引用*/
Point Point::operator ++ (int)
{
    Point temp = *this;
    ++* this;
    return temp;
}
/* i++在c++的定义中返回的是对象的值
   后缀操作符接受一个额外的int型作为形参,并不使用该形参仅做区分*/

Point& Point::operator --()
{
    _x--;
    _y--;
    return *this;
}

Point Point::operator --(int)
{
    Point temp = *this;
    ++* this;//复用了前缀++的重载
    return temp;
}

ostream& operator << (ostream& o, Point& p)
{
    o << "(" << p._x << "," << p._y << ")" << endl;
    return o;
}

int main()
{
    Point p(1, 2);
    cout << p << endl;
    //cout << p++ << endl;//重载的后缀++和--都不能被<<识别
    cout << ++p << endl;
    //cout << p-- << endl;//
    cout << --p << endl;

    return 0;

}




c++
E3231323
E3231323 重载函数初始化参数前面加const就编译通过了,看到别人说,因为函数要保证实参的值不能被修改,需要加const限制,没有为什么,就是需要。
2 个月之前 回复
E3231323
E3231323 感觉可能是编译器的问题,拿网上的代码跑了下也是报一样的错
2 个月之前 回复

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问