I am working on an assignment for CS2 in C++. I have completed my code and it runs as expected in Visual Studio. However to submit the code we have to copy it over to our unix server and make sure it still runs.
I can't get it to run so I am thinking there must be a mistake I am missing that VS is correcting?
I showed my code to my professor and he agreed that it looks like everything is correct.
Can anyone help?
rational.h
#ifndef RATIONAL_H
#define RATIONAL_H
#include <iostream>
#include <ostream>
#include <cmath>
#include <cstdlib>
using namespace std;
class rational
{
friend ostream& operator<<(ostream &, rational&);
friend istream& operator>>(istream &, rational&);
public:
rational operator+(const rational &)const;
rational operator-(const rational &)const;
bool rational::operator>(const rational &r2);
rational(int n = 0, int d = 1);
rational add(const rational &r2) const;
void add(const rational &r1, const rational &r2);
rational subtract(const rational &r2) const;
void subtract(const rational &r1, const rational &r2);
rational multiply(const rational &r2) const;
rational divide(const rational &r2) const;
int compare(const rational &r2) const;
private:
int num; // numerator
int denom; // denominator
};
#endif
rational.cpp
#include "rational.h"
using namespace std;
ostream& operator<<(ostream &out, rational &robj)
{
out << robj.num << "/" << robj.denom;
return out;
}
istream& operator>>(istream &in, rational &obj)
{
cout << "Enter values for the numerator and denominator of a rational number: ";
in >> obj.num >> obj.denom;
return in;
}
rational::rational(int n, int d)
{
num = n;
denom = d;
}
rational rational::operator+(const rational &r2) const
{
rational sum;
sum.denom = (*this).denom * r2.denom;
sum.num = ((*this).num * r2.denom) + (r2.num * (*this).denom);
return sum;
}
rational rational::operator-(const rational &r2) const
{
rational diff;
diff.denom = (*this).denom * r2.denom;
diff.num = ((*this).num * r2.denom) - (r2.num * (*this).denom);
return diff;
}
bool rational::operator>(const rational &r2)
{
double x1, x2;
x1 = double((*this).num) / double((*this).denom);
x2 = double(r2.num) / double(r2.denom);
return (x1 > x2);
}
rational rational::add(const rational &r2) const
{
rational sum;
sum.denom = (*this).denom * r2.denom;
sum.num = ((*this).num * r2.denom) + (r2.num * (*this).denom);
return sum;
}
void rational::add(const rational &r1, const rational &r2)
{
(*this).denom = r1.denom * r2.denom;
(*this).num = (r1.num * r2.denom) + (r2.num * r1.denom);
}
rational rational::subtract(const rational &r2) const
{
rational diff;
diff.denom = (*this).denom * r2.denom;
diff.num = ((*this).num * r2.denom) - (r2.num * (*this).denom);
return diff;
}
void rational::subtract(const rational &r1, const rational &r2)
{
(*this).denom = r1.denom * r2.denom;
(*this).num = (r1.num * r2.denom) - (r2.num * r1.denom);
}
rational rational::multiply(const rational &r2) const
{
rational multi;
multi.denom = (*this).denom * r2.denom;
multi.num = (*this).num * r2.num;
return multi;
}
rational rational::divide(const rational &r2) const
{
rational div;
div.denom = (*this).denom * r2.num;
div.num = (*this).num * r2.denom;
return div;
}
int rational::compare(const rational &r2) const
{
if ((*this).denom == r2.denom && (*this).num == r2.num)
return 0;
else if (double((*this).num) / double((*this).denom) > double(r2.num) / double(r2.denom))
return 1;
else
return -1;
}
main.cpp
#include "rational.h"
using namespace std;
int main()
{
rational r1(1,4), r2(1,3),r3;
cout << "r1 is initialized by the 2nd constructor: r1 = " << r1 << endl;
cout << "r2 is initialized by the 2nd constructor: r2 = " << r2 << endl << endl;
cout << "Testing the comapre() member function, found:" << endl << "\t";
int compare = r1.compare(r2);
switch (compare){
case 0:
cout << r1 << " is equal to " << r2;
break;
case 1:
cout << r1 << " is greater than " << r2;
break;
case -1:
cout << r1 << " is less than " << r2;
break;
}
cout << endl << endl;
cout << "Testing the four arithmetic member functions:" << endl;
r3.add(r1, r2);
cout << "\tr1 + r2 = " << r1 << " + " << r2 << " = " << r3 << endl;
r3.subtract(r1, r2);
cout << "\tr1 - r2 = " << r1 << " - " << r2 << " = " << r3 << endl;
cout << "\tr1 * r2 = " << r1 << " * " << r2 << " = " << r1.multiply(r2) << endl;
cout << "\tr1 / r2 = " << r1 << " / " << r2 << " = " << r1.divide(r2) << endl;
}
Compiling command g++ -c main.cpp rational.cpp
I get the error
no match for 'operator<<' in 'std::operator<< [with _Traits = std::char_traits<char>]
And another whole page worth of errors.