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

Unacceptable conditional expression of class simple fraction

本文关键字:不可接受 表达式 条件 简单      更新时间:2023-10-16

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

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;
   }
对于

整数和实数,此函数可以正常工作,但是对于简单分数,编译器会在运算符 if 中生成错误 С2451 - 类简单分数的不可接受的条件表达式。如何解决这个问题?

您的比较运算符未正确实现。它应该返回一个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;
    }
}

错误的原因是 array.mas[i][j]<min 的结果 ,根据您的定义,是一个SimpleFraction
这不能用作条件表达式,这就是为什么编译器说"类 SimpleFraction 的不可接受的条件表达式"。

如果左侧操作数小于右侧操作数,则小于运算符 <应返回>它不应返回较小的值。

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