调用不带对象参数的非静态成员函数

问题描述:

任何人都可以解释这个错误,为什么我得到它吗?我相信我已经将所有的算术运算放在了我的单独课程中。调用不带对象参数的非静态成员函数

该程序存储和操纵分数,同时测试超载。

预先感谢您。

我想在驱动程序中测试这个看起来像这样的输出。

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

main()中代码的用途是什么?你能解释一下你想让你的程序使用Fraction类吗? – 2014-10-03 03:14:08

+0

如果没有'Fraction.h'文件,'Fraction.cpp'文件是没用的。 – EJP 2014-10-03 03:14:53

+0

我有一个Fraction.h文件,我只是没有把它添加到我的文章,并不认为这很重要。 – MatthewTingle 2014-10-03 03:15:59

分数是一个类。你需要该类的一个对象来调用它的(非静态)函数。

Fraction f; 
f.getNumerator(); 
+0

对于gcd()和setNumerator()和setDenominator()呢? – MatthewTingle 2014-10-03 03:20:04

+2

所有功能的情况都是一样的。你需要更多地研究一个类和一个对象之间的区别。 – 2014-10-03 03:24:05

+0

我意识到分数是一个类,我的教授只是说,我们通常应该总是在另一个类的调用之前有Fraction ::。或无论你有什么要求: – MatthewTingle 2014-10-03 03:32:20