代码有什么问题

What‘s wrong with the code?

本文关键字:问题 什么 代码      更新时间:2023-10-16

这在Visual Studio 2015中运行良好,但是当我使用MinGw时无法运行良好。为什么?如何解决?

错误信息:

不匹配 'operator<<' (操作数类型为 'std::ostream {aka std::basic_ostream}' 和 'Fraction'( werjiorqq.cpp/werjiorqq/src line 106 C/C++ 问题

不匹配 'operator<<' (操作数类型为 'std::ostream {aka std::basic_ostream}' 和 'Fraction'( werjiorqq.cpp/werjiorqq/src line 107 C/C++ 问题

不匹配 'operator<<' (操作数类型为 'std::ostream {aka std::basic_ostream}' 和 'Fraction'( werjiorqq.cpp/werjiorqq/src line 108 C/C++ 问题

不匹配 'operator<<' (操作数类型为 'std::ostream {aka std::basic_ostream} 和 'Fraction'( werjiorqq.cpp/werjiorqq/src line 109 C/C++ 问题

调用 'Fraction::Fraction(Fraction(' 时没有匹配函数 werjiorqq.cpp/werjiorqq/src line 71 C/C++ 问题

调用 'Fraction::Fraction(Fraction(' 时没有匹配函数 werjiorqq.cpp/werjiorqq/src line 88 C/C++ 问题

<小时 />
#include <iostream>    
#include <cmath>
using namespace std;
int gcd(int m, int n) {
    
    if (m%n == 0)
        return n;
    else
        return gcd(n, m%n);
}
int  preGcd(int m, int n) {
    
    int absm = abs(m);
    int absn = abs(n);
    int g = gcd(absm, absn);
    return g;
}

class Fraction {
    int m, n;
public:
    Fraction() {
    }
    Fraction(Fraction& f) {
        m = f.getM();
        n = f.getN();
    }
    Fraction(int m, int n) {
        this->m = m;
        this->n = n;
    }
    friend ostream& operator<< (ostream& out,Fraction& f) {
        cout << f.m << '/' << f.n << endl;
        return out;
    }
    int getM() {
        return m;
    }
    int getN() {
        return n;
    }
    void reduction() {
        int g;
        if (n > m)
            g = preGcd(n, m);
        else
            g = preGcd(m, n);
        m /= g;
        n /= g;
    }
    friend Fraction operator+ (Fraction f1,Fraction f2) {
        int nn = f1.n*f2.n;
        int nm = f1.m*f2.n + f2.m*f1.n;
        Fraction *p = new Fraction(nm, nn);
        p->reduction();
        return *p;
            }
    friend Fraction operator- (Fraction f1, Fraction f2) {
        f2.m = (-f2.m);
        return operator+ (f1, f2);
    }
    friend Fraction operator* (Fraction f1, Fraction  f2) {
        /*cout << f1;
        cout << f2;*/
        int nn = f1.n*f2.n;
        int nm = f1.m*f2.m;
        Fraction *p = new Fraction(nm, nn);
        p->reduction();
        return *p;
    }
    
    friend Fraction operator/ (Fraction f1, Fraction f2) {
        int temp = f2.m;
        f2.m = f2.n;
        f2.n = temp;
        return operator*(f1, f2);
    }
    void revenue() {
        cout << n << '/' << m << endl;
    }
    
};

int main() {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    Fraction f1(a, b);
    Fraction f2(c, d);
    
    cout << f1 + f2;
    cout << f1 - f2;
    cout << f1*f2;
    cout << f1 / f2;
    f1.revenue();
}

您需要尽可能应用const。 例如:

Fraction(const Fraction &);
friend ostream& operator<< (ostream& out, const Fraction& f);
int getM() const;
int getN() const;

等。