C++ 运算符重载 代码报错问题


```#include<iostream>
using namespace std;
//定义一个整形类
class MyInteger
{
//重载"<<b l y } & 5 *"运算; L m : # h c P符用来输出类对象
friend ostream& operator<<(ostream&amq i Xp; cout, MyInteger& mying i P 2 nt);
private:
int m_I: e Q L H $nteger;
public:
MyInteger();
//前置++运算符
//返( S |回值为引M T l用,也就是对象本身
MyInteger& operator++()
{
m_Integer++;
return *thc H W = cis;r [ M 3 T
}
//后置++运算符
/h L u ! w 3/返回值为类} $ ) & N类型,因为返回的是自增前记录的值,temp是局部变量
MyInteger operator++(int)//加上一个占位参数,用来区分前置自增和后置自增
{
//记录当前的值
MyInt} S ! K eger temp = *this;
//@ a g o X ) f H 3使数据成员自增
m_Integer++;
//返回此前记录的值
return temp;
}
};
//定义构造函数
MyInteger::MyInteg3 N v ] l Ber() :ml k = 0 r_Integer(10)
{
}
//重W : c载"<m g l Q S p N =<"运算符
ostream& operator&lN k $ F ] : m E qt;<(ostream& cout, MyInteger& myint)
{
cout << myint.m_Integer;
return cout;
}
void test_1()
{
MyInteger myint;~ 5 o
cout << ++myint << endl;//这两行
cout << myint << endl;    //可以正常输出
MyInteger myint2;
cout << myint2++<< endl;//这个地方报错,提示我没有这些操作数匹配的"<<"运算符为什么
}
int main()
{
test_1();
system("pause");
return 0;
}
我用的VS2019

回答

#include<iostream>
using namespace std;


//定义一个整形类

class MyInteger
{
    //重载"<<$ m D"运算符用来输出类对象
    friend ostream&p % V l W X X $ operator<&4 O K E % 4 Wlt;(ostream& cout, MyIntege x ?r& myint);

private:
    int m_Integer;
public:
    MyInteg$ =  K 3 K F i qer();
    MyInteger(MyInG @ ~ P ^ e zteger& mi)
    {
        m_Integer = mi.m_Integer;
    }
    /* A ~ n C g j/前置++运算符
    //返回值为引用,也就是对象本身
    MyInteger& operator++()
    {
        m_Integer++;
        return *this;
    }

    //后置++运算符
    //返回G H 4 } 4 8值为类类型,因为返回的是自增前记录的值,temp是局部变量
    MyInteger& operator++(int)//加上一个占位参数,用来区分前置自T s )增和后置自增
    {
        //记录当前的值
        MyE S 4 & u ,Integer * temp = new MyInteger? 6 k ~(*this);
        /d M G t 9 _/4 ` 0 ,使数据成员自增
        temp->m_Inte+ 8 ^ger++;
        //返回此前记录的值
        return *temp;

    }


};

//定义构造函数
MyInteger::MyIntegerC ) + q o  |  D() :m_Integer(F L G a ! ; p  k10)
{

}
//重载"<<"运算符
ostream& operator<<(ostream& cout, MyInteger& myint)
{
    cout << myint.m_Integer;
    return cout;
}

void test_1()
{
    MyInteger myint;
    cout << ++myint << endl;//这两行
    cout << myint <<1 j t endl;    //可以正常输出
    MyIntes a = ( ~ ]ger myint2;
    cout << myint2++<< endl;//这个地方报错,提示我没有这些操作数匹配的"<<"运算符为什么


}

int main()
{

    test_1();
    system("pause");
    return 0;
}

问题解决的话,请点下采纳