类简单分数的不可接受的条件表达式

时间:2017-03-19 16:41:04

标签: c++ arrays class

在简单分数的类中有一个重载的比较运算符

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的行中。如何解决这个问题?

2 个答案:

答案 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;
}