类简单分数的不可接受的条件表达式
Unacceptable conditional expression of class simple fraction
在
简单分数类中有一个重载比较运算符
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;
}
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++typeid模板值转换为联合不可接受的转换
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- 如何接受可修改和不可修改的参数?
- "xshared_expression"不能接受xfunction表达式
- 表达式不可分配,将 x 和 y 值分配给形状的点
- 类简单分数的不可接受的条件表达式
- STD :: Ostream:类是不可接受的[C ]
- 指针:在 c++ 中不可分配的表达式
- C++constexpr函数真的能接受非常量表达式作为参数吗
- 表达式:映射/集合迭代器不可递增
- 如何让 gcc/g++ 接受像 LOBYTE(v15) = someExpression 这样的表达式
- 子表达式求值顺序的不可预测性
- 错误:'int'之前的预期主表达式(在接受数组的函数上下文中)
- 正则表达式库,用于维护状态,逐个字符接受输入,并在找到匹配时返回true
- 如何在c++中计算应该接受Tcl_Obj的Tcl表达式
- 为什么自定义类的这种声明是不可接受的
- Main()接受表达式吗?
- 一个只接受编译时已知表达式的函数
- function表达式不会导致接受1个参数的函数