“二进制 'operator+' 参数太多
"binary 'operator+' has too many parameters
尝试使用以下代码实现运算符重载:
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 +'参数太多
class 模板“Number”没有成员“operator+”
Number<T> Number<T>::operator+ (Number<T>& lhs, const Number<T> & rhs)
所有决定:是否包含“<T>
”;是否对发送和 returns 使用引用;是否使用 "const" and/or "friend";以及是否使用 "this", "new" and/or "->";搜索外部帮助已经够混乱了:)。
知道我做错了什么(很多事情)吗?
感谢您的考虑
您忘记了 隐式 this
参数 作为第一个参数出现在 non-static 成员函数.
要解决您的问题,只需从 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
}
可以看到程序的输出here。
删除这一行:
Number<T> operator+ (Number<T>&, const Number<T> &);
并以这种方式在 class 主体之外定义 operator+:
template<typename T>
Number<T> operator+(Number<T> const& lhs, Number<T> const& rhs) {
auto ret{ lhs };
ret.value += rhs.value;
return ret;
}
尝试使用以下代码实现运算符重载:
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 +'参数太多
class 模板“Number”没有成员“operator+”
Number<T> Number<T>::operator+ (Number<T>& lhs, const Number<T> & rhs)
所有决定:是否包含“<T>
”;是否对发送和 returns 使用引用;是否使用 "const" and/or "friend";以及是否使用 "this", "new" and/or "->";搜索外部帮助已经够混乱了:)。
知道我做错了什么(很多事情)吗?
感谢您的考虑
您忘记了 隐式 this
参数 作为第一个参数出现在 non-static 成员函数.
要解决您的问题,只需从 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
}
可以看到程序的输出here。
删除这一行:
Number<T> operator+ (Number<T>&, const Number<T> &);
并以这种方式在 class 主体之外定义 operator+:
template<typename T>
Number<T> operator+(Number<T> const& lhs, Number<T> const& rhs) {
auto ret{ lhs };
ret.value += rhs.value;
return ret;
}