在没有object参数的情况下调用非静态成员函数

时间:2014-10-03 03:10:32

标签: c++ object overloading fractions

任何人都可以解释这个错误,为什么我得到它?我相信我已经在我的单独课程中完成了所有算术。

该程序在测试重载时存储和操作分数。

提前谢谢。

我试图在驱动程序中测试它,输出看起来像这样。

f1 = 3/6, f2 = 4/5 
f1 + f2 = 39/30 = 13/10 = 1.3 
f1 - f2 = -9/30 = -3/10 = -0.3 
f1 * f2 = 12/30 = 2/5 = 0.4 
f1 / f2 = 15/24 = 5/8 = 0.625 
Enter a fraction [numerator denominator]: 2 5 
You entered 2/5 

我的Fraction.cpp类

#include "Fraction.h"

#include <iostream>

using namespace std;

Fraction::Fraction(const int numerator, const int denominator) {  }

int Fraction::getNumerator() const {
    return numerator;
}

int Fraction::getDenominator() const {
    return denominator;
}

int Fraction::gcd() const {
    int n = numerator;
    int d = denominator;
    int temp;

    while (d!=0) {
        temp = n % d;
        n = d;
        d = temp;
    }

    return n;

}

void Fraction::setNumerator(const int numerator) {
    this->numerator = numerator;
}

void Fraction::setDenominator(const int denominator) {
    this->denominator = denominator;
}

string Fraction::toString() const {
    return "";
}

double Fraction::returnDecimal() const {
    double a = (double) getNumerator();
    double b = (double) getDenominator();

    return (a / b);
}

void Fraction::reduce()  {

    int a = gcd();
    int b = numerator / a;
    int c = denominator / a;

    setNumerator(b);
    setDenominator(c);

}

Fraction Fraction::operator +(const Fraction& f) const {

    Fraction temp;

    int a = getNumerator();
    int b = getDenominator();
    int c = f.getNumerator();
    int d = f.getDenominator();

    int tempOne = b;
    int tempTwo = d;

    a = a * tempTwo;
    b = b * tempTwo;

    c = c * tempOne;
    d = d * tempOne;

    temp.setNumerator(a+c);
    temp.setDenominator(d);

    return temp;

}

Fraction Fraction::operator -(const Fraction& f) const {

    Fraction temp;

    int a = getNumerator();
    int b = getDenominator();
    int c = f.getNumerator();
    int d = f.getDenominator();

    int tempOne = b;
    int tempTwo = d;

    a = a * tempTwo;
    b = b * tempTwo;

    c = c * tempOne;
    d = d * tempOne;

    temp.setNumerator(a-c);
    temp.setDenominator(d);

    return temp;

}

Fraction Fraction::operator *(const Fraction& f) const {

    Fraction temp;

    temp.setNumerator(getNumerator() * f.getNumerator());
    temp.setDenominator(getDenominator() * f.getDenominator());

    return temp;

}

Fraction Fraction::operator /(const Fraction& f) const {

    Fraction temp;

    temp.setNumerator(getNumerator() * f.getDenominator());
    temp.setDenominator(getDenominator() * f.getNumerator());

    return temp;

}

bool Fraction::operator ==(const Fraction& f) const {

    return ( (getNumerator() == f.getNumerator()) && (getDenominator() == f.getDenominator()) );

}

bool Fraction::operator !=(const Fraction& f) const {

    return !( (getNumerator() == f.getNumerator()) && (getDenominator() == f.getDenominator()) );

}

bool Fraction::operator <(const Fraction& f) const {

    double a = getNumerator();
    double b = getDenominator();

    double c = getNumerator();
    double d = getDenominator();

    return ((a/b) < (c/d));

}

bool Fraction::operator <=(const Fraction& f) const {

    double a = getNumerator();
    double b = getDenominator();

    double c = getNumerator();
    double d = getDenominator();

    return ((a/b) <= (c/d));

}

bool Fraction::operator >(const Fraction& f) const {

    double a = getNumerator();
    double b = getDenominator();

    double c = getNumerator();
    double d = getDenominator();

    return ((a/b) > (c/d));

}

bool Fraction::operator >=(const Fraction& f) const {

    double a = getNumerator();
    double b = getDenominator();

    double c = getNumerator();
    double d = getDenominator();

    return ((a/b) >= (c/d));

}

ostream& operator <<(ostream& out, const Fraction& f) {
    out << f.getNumerator() << "/" << f.getDenominator();

    return out;
}

istream& operator >>(istream& in, Fraction& f) {    

    int a;
    int b;

    in >> a >> b;

    f.setNumerator(a);
    f.setDenominator(b);

    return in;

}

我的主要课程。

#include <iostream>
#include "Fraction.h"
#include "Fraction.cpp"
using namespace std;

int main(int argc, const char * argv[])
{

    Fraction::getNumerator() const;
    Fraction::getDenominator() const;
    Fraction::gcd() const;
    Fraction::setNumerator(<#const int numerator#>);
    Fraction::setDenominator(<#const int denominator#>);
    Fraction::toString();
    Fraction::returnDecimal() const;
    Fraction::reduce();

    return 0;
}

Fraction.h

#include <iostream>
#include <string>

using namespace std;

class Fraction {

private:

    int numerator;

    int denominator;

    int gcd() const;

public:

    Fraction(const int numerator = 0, const int denominator = 0);

    int getNumerator() const;

    int getDenominator() const;

    void setNumerator(const int numerator);

    void setDenominator(const int denominator);

    string toString() const;

    double returnDecimal() const;

    void reduce();

    bool operator ==(const Fraction& f) const;

    bool operator !=(const Fraction& f) const;

    bool operator <(const Fraction& f) const;

    bool operator <=(const Fraction& f) const;

    bool operator >(const Fraction& f) const;

    bool operator >=(const Fraction& f) const;

    Fraction operator +(const Fraction& f) const;

    Fraction operator -(const Fraction& f) const;

    Fraction operator *(const Fraction& f) const;

    Fraction operator /(const Fraction& f) const;

    friend ostream& operator <<(ostream&, const Fraction&);

    friend istream& operator >>(istream&, Fraction&);

};

1 个答案:

答案 0 :(得分:17)

分数是一个类。您需要该类的对象才能调用其(非静态)函数。

Fraction f;
f.getNumerator();