错误:无法将运算符从分数转换为布尔值
error: could not convert operator from fraction to bool
#include <iostream>
using namespace std;
#include "fraction.h"
int main()
{
Fraction f(1,2);
Fraction g(1,2);
if (f > g) cout << f << " > " << g << endl;
return 0;
}
Fraction::Fraction()
{
//ctor
m_top = 0;
m_bottom = 1;
}
Fraction::Fraction(int t, int b)
{
//ctor
m_top = t;
m_bottom = b;
reduce();
}
bool Fraction operator>(const Fraction& l, const Fraction& r)
{
int a = l.getTop();
int b = l.getBottom();
int c = r.getTop();
int d = r.getBottom();
if ((a*d-c*b) > (b*d))
return true;
}
void Fraction::reduce()
{
int g=gcf(m_top, m_bottom);
m_top /= g;
m_bottom /= g;
}
/// recursive
int Fraction::gcf(int m, int n)
{
if (n == 0) return m;
return gcf(n, m % n);
}
#ifndef FRACTION_H
#define FRACTION_H
#include <iostream>
using namespace std;
class Fraction
{
public:
Fraction();
Fraction(int, int);
int getTop() {return m_top;}
int getBottom() {return m_bottom;}
void set(int t, int b) {m_top=t; m_bottom=b; reduce();}
Fraction( Fraction t, Fraction b);
protected:
private:
void reduce();
int gcf(int, int);
int m_top;
int m_bottom;
};
ostream& operator<<(ostream&, Fraction);
Fraction operator+(Fraction l, Fraction r);
Fraction operator*(Fraction l, Fraction r);
Fraction operator/(Fraction l, Fraction r);
Fraction operator>(Fraction l, Fraction r);
Fraction operator>=(Fraction l, Fraction r);
Fraction operator<(Fraction l, Fraction r);
Fraction operator<=(Fraction l, Fraction r);
Fraction operator==(Fraction l, Fraction r);
Fraction operator!=(Fraction l, Fraction r);
#endif // FRACTION_H
日志显示错误发生在 int main(( 上错误:无法将"运算符>(f,g("从"分数"转换为"布尔">
有人可以告诉我我做错了什么,并修复我的代码吗?布尔语句有问题吗?如果是这样,我该如何解决?
Fraction operator>(Fraction l, Fraction r);
Fraction operator>=(Fraction l, Fraction r);
Fraction operator<(Fraction l, Fraction r);
Fraction operator<=(Fraction l, Fraction r);
Fraction operator==(Fraction l, Fraction r);
Fraction operator!=(Fraction l, Fraction r);
这些运算符应该返回布尔值,而不是Fraction
:
bool operator>(Fraction l, Fraction r);
bool operator>=(Fraction l, Fraction r);
bool operator<(Fraction l, Fraction r);
bool operator<=(Fraction l, Fraction r);
bool operator==(Fraction l, Fraction r);
bool operator!=(Fraction l, Fraction r);
编译器告诉您,无法将返回值Fraction
转换为bool
,因为此类运算符应如此。
编辑
此外,这些运算符的预期签名是:
bool operator>(const Fraction& l, const Fraction& r);
bool operator>=(const Fraction& l, const Fraction& r);
bool operator<(const Fraction& l, const Fraction& r);
bool operator<=(const Fraction& l, const Fraction& r);
bool operator==(const Fraction& l, const Fraction& r);
bool operator!=(const Fraction& l, const Fraction& r);
const
因为这些运算符不应该修改输入值和引用&
以避免复制整个对象。
相关文章:
- 变量定义到C++布尔值转换
- fstream / ifstream / ofstream 对象如何转换为布尔值
- 将uintptr_t转换为布尔值会使 SSO 基准速度减慢数倍
- 在目标 c++ 中将 CFTypeRef 转换为布尔值
- isspace 函数的性能警告,从 int 转换为布尔值
- 将返回表达式隐式转换为布尔值
- 将结构转换为布尔值
- 整数在 C++ 中没有被类型转换为布尔值
- 为什么我的变体将 std::string 转换为布尔值
- 为什么使用 int 的转换,而不是布尔值
- lambda 转换为布尔值,而不是推导函数指针类型
- 从常量字符串到布尔值的隐式强制转换
- 我无法将'2D array whit bool'转换为"空 2D 数组布尔值"(用于生命游戏)
- 尝试将字符串变量转换为布尔值会导致 "true" 和 "false" 都等于 0
- Typedef shared_ptr转换为<T>布尔值
- 如果模板值可转换为布尔值,则在编译时禁用类方法
- 避免或警告在 GCC 中从常量字符* 隐式转换为布尔值
- 为什么 lambda 会转换为值为真的布尔值?
- 有没有办法将模板的替换失败转换为布尔值(真/假)或标签(标准::true_type/标准::false_type)
- 将流隐式转换为布尔值