VS2013 Errore C ++ C2679: binario ‘>>’: nessun operatore trovato che prende un operando di destra di tipo ‘Frazione’ (o non c’è una conversione accettabile)

Ciao a tutti, sono nuovo nello stackoverflow quindi per favore perdonami se commetto degli errori. Mi viene chiesto di scrivere un programma che sviluppi rettangoli e cerchi da punti costituiti da frazioni. Ho una class definita per la mia frazione e ho sovraccaricato le funzioni amico dell’operatore binario per l’inserimento e l’estrazione “<>” per la mia frazione. mentre sovraccarico gli operatori della mia class Point, ottengo questo errore e non riesco a capire perché lo sto facendo, anche se ho sovraccaricato l’operatore nella mia class Fraction. So che il problema deve essere nella mia syntax per la definizione della funzione friend nella mia class Fraction. Sono perso e ogni aiuto sarà apprezzato. Non sono autorizzato a utilizzare le librerie globali. Grazie per l’aiuto. joe

point.h

#ifndef POINT_H #define POINT_H #include  #include "fraction.h" using namespace std; class Point { public: Point(); Point(const Point&); Point(const Fraction&); Point(Fraction&, Fraction&); ~Point(); Fraction getX(void) const; void setX(const Fraction&); Fraction getY(void) const; void setY(const Fraction&); void moveBy(Fraction delX, Fraction delY); void moveBy(int iOld); void flipByX(void); void flipByy(void); void print(void); void operator=(const Point&); Point operator+(const Point&); Point operator-(const Point&); friend ostream& operator<>(istream&, Point&); private: Fraction x; Fraction y; }; #endif //Descritpion: Point.cpp #include  #include "point.h" #include "fraction.h" #include "rectangle.h" #include "utilities.h" using namespace std; Point::Point() : x(1, 2) , y(1, 1) { } Point::Point(const Point& po1) : x(po1.getX()), y(po1.getY()) { } Point::Point(const Fraction& fr1) : x(fr1), y(1,1) { } Point::Point(Fraction& fr1, Fraction& fr2) : x(fr1), y(fr2) { } Point::~Point() { } Fraction Point::getX() const { return x; } void Point::setX(const Fraction& fr1) { x = fr1; } Fraction Point::getY() const { return y; } void Point::setY(const Fraction& fr2) { y = fr2; } void Point::moveBy(Fraction delX, Fraction delY) { x = x + delX; y = y + delY; } void Point::moveBy(int iOld) { Fraction frac(iOld); x = x + frac; y = y + frac; } void Point::flipByX() { x.setNum(-x.getNum()); } void Point::flipByy() { y.setNum(-y.getNum()); } void Point::operator=(const Point& arg) { x = arg.x; y = arg.y; return; } Point Point::operator+(const Point& arg) { return Point(x + arg.x, y + arg.y); } Point Point::operator-(const Point& arg) { return Point(this->getX() - arg.getX(), this->getY() - arg.getY()); } ostream& operator<<(ostream& out, const Point& po) { out << " " << po.getX() << " : " << po.getY() <>(istream& in, Point& po) { cout <> po.x; //Error C2679 cout <> po.y; //Error C2679 return in; } 

e per la frazione.h

 #ifndef FRACTION_H #define FRACTION_H #include  using namespace std; class Fraction { public: Fraction(); Fraction(const Fraction&); Fraction(int); Fraction(int, int); ~Fraction(){ } void print(void) const; int getNum(void) const; void setNum(int); int getDenom(void) const; void setDenom(int); void operator=(const Fraction&); Fraction operator+(const Fraction&); Fraction operator-(const Fraction&); Fraction operator*(const Fraction&); Fraction operator/(const Fraction&); friend ostream& operator<>(istream&, Fraction&); private: int num; int denom; }; #endif 

il Fraction.cpp

 #include  #include "point.h" #include "fraction.h" #include "rectangle.h" #include "utilities.h" using namespace std; Fraction::Fraction() : num(0), denom(0) { } Fraction::Fraction(const Fraction& arg) { num = arg.num; denom = arg.denom; } Fraction::Fraction(int arg) { num = arg; denom = 1; } Fraction::Fraction(int n, int d) { int temp; int a = n; int b = d; while (b) { temp = b; b = a % b; a = temp; } a = (a < 0) ? -a : a; //num = (d < 0) ? -(n / a) : n / a; num = n / a; denom = (d < 0) ? -(d / a) : d / a; } void Fraction::print() const { cout << num << "/" << denom <getNum() == 0 || arg.getNum() == 0) { return Fraction(0, 1); } else { return Fraction(num * arg.num, denom * arg.denom); } } Fraction Fraction::operator/(const Fraction& arg) { if (this->getNum() == 0 || arg.getNum() == 0) { return Fraction(0, 1); } else { return Fraction(num * arg.denom, denom * arg.num); } } ostream& operator<<(ostream& out, const Fraction& rOp) { return out << " " << rOp.getNum() << " / " << rOp.getDenom() <>(istream& in, Fraction& arg) { int a, b; cout <> a; cout <> b; arg = Fraction(a, b); return in; }