错误:无法将运算符从分数转换为布尔值

error: could not convert operator from fraction to bool

本文关键字:转换 布尔值 运算符 错误      更新时间:2023-10-16
#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因为这些运算符不应该修改输入值和引用&以避免复制整个对象。