"二进制'运算符+'有太多参数

"binary 'operator+' has too many parameters

本文关键字:太多 参数 运算符 二进制      更新时间:2024-09-27

尝试使用以下代码实现运算符重载:

class Number
{
T value;
public:
Number(T v);
Number();
Number<T> operator+ (Number<T>&, const Number<T> &);
T getValue() { return value; };
};

template <typename T>
Number<T>::Number(T val):value(val) { }
template <typename T> 
Number<T> Number<T>::operator+ (Number<T>& lhs, const Number<T> & rhs)  {    
return lhs.value + rhs.value;
}

试图模拟网上发现的类似例子,但这次尝试产生了几个编译器错误

  • "{"缺少函数头(旧式格式列表?(

  • 二进制"operator+"的参数太多

  • 类模板";数字";没有成员";运算符+";

    Number<T> Number<T>::operator+ (Number<T>& lhs, const Number<T> & rhs)

所有的决定:是否包括";CCD_ 2";;是否对发送和返回使用引用;是否使用";const";和/或";"朋友";;以及是否使用";这个"新的";和/或"->quot;;搜索外部帮助已经够令人困惑的了:(。

你知道我做错了什么吗?

感谢您的考虑

您忘记了隐式this参数,它是非静态成员函数中的第一个参数。

解决您的问题,只需从operator+中删除额外的第一个参数,如下所示:

template<typename T>
class Number
{
T value;
public:
Number(T v);
Number();
Number<T> operator+ (const Number<T> &);//REMOVED UNNECESSARY PARAMETER
T getValue() { return value; };
};

template <typename T>
Number<T>::Number(T val):value(val) { }
template <typename T> 
Number<T> Number<T>::operator+ (const Number<T> & rhs)  {  //REMOVED UNNECESSARY PARAMETER  
return value + rhs.value;//CHANGED lhs.value to value
}

程序的输出可以在这里看到。

删除此行:

Number<T> operator+ (Number<T>&, const Number<T> &);

并以这种方式定义类主体外的运算符+:

template<typename T>
Number<T> operator+(Number<T> const& lhs, Number<T> const& rhs) {
auto ret{ lhs };
ret.value += rhs.value;
return ret;
}