运算符重载错误"no match for operator error"
Operator Overloading Errors "no match for operator error"
>我在主部分中与"运算符+"错误不匹配。我重载了所有运算符作为朋友,除了=我尝试调试但无法弄清楚我不知道,我在跳过什么。请指教。
#include <iostream>
using namespace std;
class fraction
{
long num;
long den;
public:
fraction( ){num = 0L ; den = 1L ;}
fraction(long l_num,long l_den){num = l_num ; den = l_den ;}
fraction(const fraction& f){num=f.num; den=f.den;}
~fraction ( ){}
long getNum (void) const{return num ;}
long getDen (void) const{return den ;}
void print(void)
{
if(den==0)den=1L;
cout<<num<<"/"<<den <<endl;
}
fraction inc ( )
{
long numX = (num) + (den);
long denY = (den);
return fraction(numX, denY );
}
friend fraction operator +(fraction &f1 , fraction &f2);
friend fraction operator +(int i, fraction &f2);
friend fraction &operator++(fraction & f1);
fraction operator =( const fraction &f);
friend fraction operator -(fraction &f1 , fraction &f2);
friend fraction operator *(fraction &f1 , fraction &f2);
friend fraction operator /(fraction &f1 , fraction &f2);
};
inline fraction operator +(fraction &f1, fraction &f2)
{
fraction temp;
temp.num=(f1.num*f2.den)+(f1.den*f2.num);
temp.den=f1.den*f2.den;
return temp;
}
inline fraction operator +(int i, fraction &f2)
{
fraction temp;
temp.num=i*f2.den+f2.num;
temp.den=f2.den;
return temp;
}
inline fraction &operator++(fraction& f1)
{
f1.num=f1.num+f1.den;
return f1;
}
inline fraction fraction::operator=(const fraction &f)
{
num=f.num;
den=f.den;
return*this;
}
inline fraction operator -(fraction &f1, fraction &f2)
{
fraction temp;
temp.num=(f1.num*f2.den)-(f1.den*f2.num);
temp.den=f1.den*f2.den;
return temp;
}
inline fraction operator *(fraction &f1, fraction &f2)
{
fraction temp;
temp.num=f1.num*f2.num;
temp.den=f1.den*f2.den;
return temp;
}
inline fraction operator /(fraction &f1 , fraction &f2)
{
fraction temp;
temp.num=f1.num*f2.den;
temp.den=f1.den*f2.num;
return temp;
}
int main ( )
{
fraction f1, f2(2L,0L);
fraction f3(f2);
f1.print();
f2.print();
f3.print();
f3 = f3 + fraction (-5 , 4);
f1 = f2 + f3;
f1.print ( );
f1 = f2 - f3;
f1.print();
f1 = f2 * f3;
f1.print();
(++ (++f1)).print();
f1 = f2 / f3;
f1.print();
f1 = 5 + f1;
f1.print();
return 0;
}
所有运算符都将其参数作为对非常量fraction
的引用。这意味着它们只能使用 fraction
类型的非常量左值调用。临时值(例如 fraction(-5, 4)
的结果(是右值,而不是左值,因此不能用作运算符的参数。
我敢说算术运算符将非常量引用作为参数是错误的:这表明他们将修改其操作数,这是完全错误的。您应该将所有二进制运算符的参数从 fraction &
更改为 const fraction &
。
对 const
的引用允许 rvalues 将其绑定到,因此代码将按预期工作。
当然,这不适用于operator++
(这就是为什么我在上面提到二进制运算符(。 ++
实际上修改了其操作数,因此在其情况下,引用 non-const 是正确的方法。这同样适用于复合赋值运算符,例如 +=
。
此行导致所有错误
f3 = f3 + fraction (-5 , 4)
您正在使用fraction operator +(fraction &f1 , fraction &f2);
函数来添加对象和匿名对象。
但匿名对象只是暂时的。阅读此答案。
删除该行,您的代码应该可以工作。
编辑:
如果您更改,可能会起作用
fraction operator +(fraction &f1 , fraction &f2);
自
fraction operator +(fraction &f1 , fraction f2);
相关文章:
- 错误消息:使用"string* +="后"no match for 'operator+='"
- 在 Eclipse: "error: no match for 'operator='" 中获取错误消息
- 如何'Invalid conversion'和'no match for operator'更正这些 c++ 错误
- 为什么当我没有变量或其他任何命名的东西时"no match for 'operator==' "错误?
- 编译时二叉搜索树错误的反向迭代器表示"no matching function call for operator=()"
- 为什么我收到以下错误:"no match for 'operator=='"?(带模板的嵌套类)
- 在命名空间内的类中使用带有运算符重载的字符串流时"no match for ‘operator>>’"
- 如何修复C++中的"no match for operator+"?
- 运算符重载错误"no match for operator error"
- "No match for operator []"
- 如果我没有重载,为什么我会"no match for ‘operator=’"自定义类?
- 为什么编译器显示错误"no match for 'operator[]' (operand types are 'carti' and 'int')"
- 对简单的帐户检查程序有问题?程序返回编译错误,指出"no match for 'operator||' unsure of how to fix?"
- "no match for 'operator >>'"代码中是什么意思?
- "no match for ‘operator>>’ in ‘inputFile >> buffer"错误?
- 如何修复" no match for 'operator<<' in 'std::cout"错误?
- 简单迭代器差异的"No match for operator-"错误
- 使用 std::string 时"error: no match for ‘operator<<"
- 访问基于遗传算法的PNRG中的数组? " no match for operator[] "
- "No match for operator+"