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

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;
    }
    

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

    已采纳该答案
    打赏 评论
  • 九头蛇daze 2020-08-27 14:01

    跑了一下程序,代码没问题,重载的运算符可以正常运行,不知是否是工程配置问题,你把报错内容显示一下。

    打赏 评论

相关推荐 更多相似问题