我遇到了麻烦。
#include <iostream>
#include <cstdlib>
using namespace std;
class rec
{
private:
float l;
float w;
public:
rec(): l(0) , w(0) {}
rec(float a)
{
l = a;
w = 0.0;
}
rec(float a, float b): l(a) , w(b) {}
friend rec operator +(rec& , rec&);
//friend rec operator +(float , rec&);
friend ostream& operator <<(ostream&, rec&);
};
ostream& operator <<(ostream& out , rec& r3)
{
out << "l " << r3.l << endl << "w " << r3.w;
return out;
}
int main()
{
rec r1(8, 3) , r2(2,7) , r3;
r3 = 5.0 + r2;
cout << "sum " << r3;
}
rec operator +(rec r1 , rec r2)
{
float lsum , wsum;
lsum = r1.l + r2.l;
wsum = r1.w + r2.w;
return rec(lsum , wsum);
}
我认为这里的自动类型转换的目的是使其成为可能 r3 = 5.0 + r2 其中5.0被视为要在重载+和&lt;&lt;中使用的对象函数使朋友rec操作符+(float,rec&amp;); 不必要。 也许我在这里遗漏了一些东西。
答案 0 :(得分:1)
您的代码有两个问题。首先,friend rec operator +(rec& , rec&);
将声明一个operator+
,它对其参数进行非const引用。通过构造函数从float
到rec
的转换将产生一个临时的,而非const引用不能绑定到临时的。您应该通过按值或const引用接受参数来修复它。
第二个问题是operator+
的定义与它的当前声明不匹配。