• 运算符重载must take either zero or one argument错误


    在写类对象(我用结构体了)时会用到运算符重载,这时候出现了问题,编译时始终报错:item::operator+(const item&, const item&)' must take either zero or one argument;

    代码在此:

    struct item{
        int a,b;
        item(int _a=0,int _b=0):a(_a),b(_b){};
        item operator - (const item& c);
        item operator + (const item& _a,const item& _b);
    };
    item item::operator - (const item& c){
        return item(a-c.a,b-c.b);//返回临时对象
    }
    item item::operator + (const item& _a,const item& _b){
        return item(_a.a+_b.a,_a.b+_b.b);//返回临时对象
    }

    出现了运算符重载为成员函数时参数个数过多的情况。

    可以将双参数成员函数(加法)改为全局变量或改为单参数全局变量(形如减法)。

    因为在调用时,"a-b"会被编译器理解成

    a.operator - (b)

    所以运算符重载为成员函数时参数个数应为运算符目数减一;重载为全局函数时等于运算符的目数。

    修改代码为:

    struct item{
        int a,b;
        item(int _a=0,int _b=0):a(_a),b(_b){};
        item operator - (const item& );
    };
    item item::operator - (const item& c){
        return item(a-c.a,b-c.b);
    }
    item operator + (const item& A,const item& B){
        return item(A.a+B.a,A.b+B.b);
    }
  • 相关阅读:
    二分查找
    「数学」二次函数中项系数大小与图像的关系
    「数学」夹角公式
    「CF80A」Panoramix's Prediction
    「Luogu P6101」[EER2]出言不逊
    「数学」三角函数公式以及部分证明
    「Luogu P6069」[MdOI2020] Group
    「CF80B」Depression
    「数学」Menelaus定理与Ceva定理
    「AT1175」ニコニコ文字列
  • 原文地址:https://www.cnblogs.com/SulfurDioxideHippocampus/p/9249356.html
Copyright © 2020-2023  润新知