"二进制'运算符+'有太多参数
"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+"的参数太多
类模板";数字";没有成员";运算符+";
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;
}
相关文章:
- C++程序给出了太多参数警告
- 调用宏时参数太多
- QObject::connect 有太多的参数
- 错误太多参数无法正常工作
- 通过引用传递太多参数可能效率低下?
- C++中的参数太多
- 提升 ODEINT 太多参数无法发挥作用
- 参数太多,无法在C++中'FILE* popen()'发挥作用
- 野牛:如何修复这个"参数太多而无法运行'int yylex()'错误?
- 在功能调用中免费结构太多参数
- C++中的模板参数太多
- 重载运算符<<:此运算符函数的参数太多
- 依赖注入/继承设计模式的构造函数参数太多
- 错误太多参数无法'void addBook()'
- 函数调用的参数太多,预期为 0,有 1。 "InfInt.h"字符串函数
- 函数调用运算符重载的参数太多
- C++中的构造函数参数太多
- Mysql.h c++ 参数太多
- 在重载函数的函数参数中使用右值引用会创建太多组合
- 警告:格式 [-Wformat-extra-args] 的参数太多