我正在尝试使用以下原型重载加法运算符:
obj operator+(obj&, obj&);
适用于a+b
但会在a+b+c
g ++吐出以下错误:
test.cpp:17:6: error: no match for ‘operator+’ in ‘operator+((* & a), (* & b)) + c’
test.cpp:17:6: note: candidates are:
test.cpp:10:5: note: obj operator+(obj&, obj&)
error: no match for 'operator+' in 'operator+(obj&, obj&)
note: candidates are: obj operator+(obj&, onj&)
答案 0 :(得分:3)
问题是你的参数是一个非const引用,操作符返回一个新对象。
因此,a+b
计算临时对象,该临时对象不能按照标准绑定到非const
引用。因此,它不能作为参数传递给operator+
。 @chris建议,解决方案最有可能使用const
引用,因为您不应该修改operator+
的操作数。
没有人会这么想,因此我个人认为这样做会很糟糕。
答案 1 :(得分:0)
您可以假设等式的左侧始终引用“this”对象,这意味着您可以将重载运算符的签名更改为:
obj operator+(const obj &other){
// Add value of "this" to value of other
// Return obj
}