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

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条)

报告相同问题?

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分