Botigga 2022-02-01 17:09 采纳率: 0%
浏览 29

C++递减函数重载,在后置递减的测试代码中出现“没有与操作数匹配的<<运算符”故障,求解


#include<iostream>
using namespace std;

//--运算符的重载,前置重载和后置重载

class MyInteger
{
    friend ostream &operator<<(ostream& cout, MyInteger& p);

public:
    MyInteger()
    {
        m_Num = 10;
    }

    //前置递减的重载
    MyInteger& operator--()
    {
        --m_Num;
        return *this;
    }

    //后置递减的重载
    MyInteger operator--(int)
    {
        MyInteger tmp = *this;
        m_Num--;
        return tmp;
    }

private:
    int m_Num;
};

ostream &operator<<(ostream& cout, MyInteger &myint)
{
    cout << myint.m_Num << endl;
    return cout;
}

void test01()
{
    MyInteger myint;
    cout << --myint<< endl;
    cout << myint<< endl;
}

void test02()
{
    MyInteger myint;
    cout << myint-- << endl;
    cout << myint << endl;
}

int main()
{
    test01();
    test02();

    system("pause");
    return 0;
}

故障截图:

img

img

  • 写回答

2条回答 默认 最新

  • [PE]经典八炮 2022-02-01 17:25
    关注

    首先说明一点:最好不要局部变量与全局变量重名,虽然语法上允许,但是最好不要,会导致程序可读性降低,比如你重载运算符,形参名字不应该是cout,换个名字不好吗。
    这个问题也是因为你代码不规范导致的,因为myint--返回的是一个右值,而运算符重载参数是一个左值引用,通常不加const的左值引用不能绑定一个右值,因为你可能在函数中修改实参。解决方法就是把第二个参数改成const左值引用。这也是代码习惯问题,在函数中不修改实参一定要用const引用,切记!

    评论

报告相同问题?

问题事件

  • 创建了问题 2月1日

悬赏问题

  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数