在简单分数的类中有一个重载的比较运算符
friend SimpleFraction operator <(const SimpleFraction&x, const SimpleFraction&y) {
if (x.b == y.b)
{
if (x.a < y.a)
return x;
else
return y;
}
else
{
if (x.a*y.b < x.b*y.a)
return x;
else
return y;
}
}
还有一个模板函数用于查找tempelate类数组的最小值
template <typename T> T myArray <T>::minimum(myArray<T>& array)
{
T min = array.mas[0][0];
for (int i = 0; i < array.line; i++)
{
for (int j = 0; j < array.column; j++)
{
if (array.mas[i][j]<min )
min = array.mas[i][j];
}
}
return min;
}
使用整数和实数这个函数可以正常工作,但是对于简单的分数,编译器会生成错误С2451-类简单分数的不可接受的条件表达式 - 在运算符if的行中。如何解决这个问题?
答案 0 :(得分:0)
您的比较运算符未正确实现。它应该返回bool
:
friend bool operator <(const SimpleFraction&x, const SimpleFraction&y) {
if (x.b == y.b)
{
return x.a < y.a;
}
else
{
return x.a*y.b < x.b*y.a;
}
}
答案 1 :(得分:0)
错误的原因是array.mas[i][j]<min
的结果,根据您的定义,是SimpleFraction
。
这不能用作条件表达式,这就是编译器说“类SimpleFraction的不可接受的条件表达式”的原因。
如果左侧操作数小于右侧操作数,则小于运算符&lt;应返回true,否则返回false。 它不应该返回较小的值。
friend bool operator <(const SimpleFraction&x, const SimpleFraction&y)
{
return a.b == y.b ? x.a < y.a : x.a*y.b < x.b*y.a;
}