kanlian4095 2020-08-27 13:11 采纳率: 80%
浏览 176
已采纳

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


```#include<iostream>
using namespace std;


//定义一个整形类

class MyInteger
{
    //重载"<<"运算符用来输出类对象
    friend ostream& operator<<(ostream& cout, MyInteger& myint);

private:
    int m_Integer;
public:
    MyInteger();
    //前置++运算符
    //返回值为引用,也就是对象本身
    MyInteger& operator++()
    {
        m_Integer++;
        return *this;
    }

    //后置++运算符
    //返回值为类类型,因为返回的是自增前记录的值,temp是局部变量
    MyInteger operator++(int)//加上一个占位参数,用来区分前置自增和后置自增
    {
        //记录当前的值
        MyInteger temp = *this;
        //使数据成员自增
        m_Integer++;
        //返回此前记录的值
        return temp;

    }


};

//定义构造函数
MyInteger::MyInteger() :m_Integer(10)
{

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

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


}

int main()
{

    test_1();
    system("pause");
    return 0;
}
我用的VS2019
  • 写回答

2条回答 默认 最新

  • threenewbee 2020-08-27 14:13
    关注
    #include<iostream>
    using namespace std;
    
    
    //定义一个整形类
    
    class MyInteger
    {
        //重载"<<"运算符用来输出类对象
        friend ostream& operator<<(ostream& cout, MyInteger& myint);
    
    private:
        int m_Integer;
    public:
        MyInteger();
        MyInteger(MyInteger& mi)
        {
            m_Integer = mi.m_Integer;
        }
        //前置++运算符
        //返回值为引用,也就是对象本身
        MyInteger& operator++()
        {
            m_Integer++;
            return *this;
        }
    
        //后置++运算符
        //返回值为类类型,因为返回的是自增前记录的值,temp是局部变量
        MyInteger& operator++(int)//加上一个占位参数,用来区分前置自增和后置自增
        {
            //记录当前的值
            MyInteger * temp = new MyInteger(*this);
            //使数据成员自增
            temp->m_Integer++;
            //返回此前记录的值
            return *temp;
    
        }
    
    
    };
    
    //定义构造函数
    MyInteger::MyInteger() :m_Integer(10)
    {
    
    }
    //重载"<<"运算符
    ostream& operator<<(ostream& cout, MyInteger& myint)
    {
        cout << myint.m_Integer;
        return cout;
    }
    
    void test_1()
    {
        MyInteger myint;
        cout << ++myint << endl;//这两行
        cout << myint << endl;    //可以正常输出
        MyInteger myint2;
        cout << myint2++<< endl;//这个地方报错,提示我没有这些操作数匹配的"<<"运算符为什么
    
    
    }
    
    int main()
    {
    
        test_1();
        system("pause");
        return 0;
    }
    

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 关于#html5#的问题:H5页面用户手机返回的时候跳转到指定页面例如(语言-javascript)
  • ¥15 无法使用此凭据登录,因为你的域不可用,如何解决?(标签-Windows)
  • ¥15 yolov9的训练时间
  • ¥15 二叉树遍历没有报错但无法正常运行
  • ¥15 在linux系统下vscode运行robocup3d上场球员报错
  • ¥15 Python语言实验
  • ¥15 SAP HANA SQL 增加合计行
  • ¥20 用C#语言解决一个英文打字练习器,有偿
  • ¥15 srs-sip外部服务 webrtc支持H265格式
  • ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动