【问题标题】:Overloaded operator must take zero or one argument重载的运算符必须接受零个或一个参数
【发布时间】:2014-03-19 17:17:27
【问题描述】:

是的,这个问题之前有人问过,但问题是操作符是一个成员函数,而这里不是这样。这些是我的文件:

minmax.h

#ifndef MINMAX_H
#define MINMAX_H

class MinMax
{
private:
    int m_nMin;
    int m_nMax;

public:
    MinMax(int nMin, int nMax);

    int GetMin() { return m_nMin; }
    int GetMax() { return m_nMax; }

    friend MinMax operator+(const MinMax &cM1, const MinMax &cM2);
    friend MinMax operator+(const MinMax &cM, int nValue);
    friend MinMax operator+(int nValue, const MinMax &cM);
};

#endif // MINMAX_H


minmax.cpp

#include "minmax.h"

MinMax::MinMax(int nMin, int nMax)
{
    m_nMin = nMin;
    m_nMax = nMax;
}

MinMax MinMax::operator+(const MinMax &cM1, const MinMax &cM2)
{
    //compare member variables to find minimum and maximum values between all 4
    int nMin = cM1.m_nMin < cM2.m_nMin ? cM1.m_nMin : cM2.m_nMin;
    int nMax = cM1.m_nMax > cM2.m_nMax ? cM1.m_nMax : cM2.m_nMax;

    //return a new MinMax object with above values
    return MinMax(nMin, nMax);
}

MinMax MinMax::operator+(const MinMax &cM, int nValue)
{
    //compare member variables with integer value
    //to see if integer value is less or greater than any of them
    int nMin = cM.m_nMin < nValue ? cM.m_nMin : nValue;
    int nMax = cM.m_nMax > nValue ? cM.m_nMax : nValue;

    return MinMax(nMin, nMax);
}

MinMax MinMax::operator+(int nValue, const MinMax %cM)
{
    //switch argument places and pass them to previous operator version
    //this avoids duplicate code by reusing function
    return (cM + nValue);
}


ma​​in.cpp

#include <iostream>
#include "minmax.h"

using namespace std;

int main()
{
    MinMax cM1(10, 15);
    MinMax cM2(8, 11);
    MinMax cM3(3, 12);

    //sum all MinMax objects to find min and max values between all of them
    MinMax cMFinal = cM1 + 5 + 8 + cM2 + cM3 + 16;
    cout << cMFinal.GetMin() << ", " << cMFinal.GetMax() << endl;

    return 0;
}


邮件内容为error: 'MinMax MinMax::operator+(const MinMax&amp;, const MinMax&amp;)' must take either zero or one argument

【问题讨论】:

  • 您不应该在开头使用MinMax:: 定义它们。
  • 这些运算符都不是MinMax 的成员,因此您不能这样定义它们。 friend 函数不是该类的成员。
  • 现在可以正常使用了,谢谢你们!
  • 这个问题在每个配置中都被问过。
  • MinMax cMFinal = cM1 + 5 + 8 + cM2 + cM3 + 16; 我不想在项目中看到这段代码。不是很好地使用运算符重载。坚持功能。尝试查看std::minmaxstd::minmax_element

标签: c++ operator-overloading


【解决方案1】:

将我的评论变成答案:

通过将MinMax:: 放在函数前面,您将函数定义为成员函数,因此它们成员函数。

MinMax MinMax::operator+(const MinMax &cM, int nValue)
{  // should be operator+ without the MinMax:: at the front.

    //compare member variables with integer value
    //to see if integer value is less or greater than any of them
    int nMin = cM.m_nMin < nValue ? cM.m_nMin : nValue;
    int nMax = cM.m_nMax > nValue ? cM.m_nMax : nValue;

    return MinMax(nMin, nMax);
}

你可以看到它在工作here

【讨论】:

    【解决方案2】:

    正如你所说,它们不是成员函数。

    因此,在他们的定义中,MinMax:: 前缀不正确,不应存在。

    【讨论】:

      猜你喜欢
      • 2012-11-12
      • 2020-10-15
      • 2021-11-17
      • 1970-01-01
      • 2015-06-04
      • 2019-11-12
      • 2018-04-25
      • 2014-06-13
      • 2017-07-20
      相关资源
      最近更新 更多