erreur: opérateur surchargé & lt; & lt; ' doit être un opérateur binaire (a 3 paramètres)

Je sais qu'il ya beaucoup de questions de ce genre, mais je ne pouvais pas trouver une solution qui a fonctionné pour moi.

Je suis en train de faire simple fraction de la calculatrice que pouvez ajouter ou soustraire un nombre quelconque de fonctions et d'écrire la réponse à une réduction de la fraction.

Exemple: input=
3/2 + 4/
8
sortie =
2

Je suis en train de surcharge des opérateurs dans le but d'accomplir cette tâche.

Dans le programme, je suis en train de développer l'entrée se compose d'une expression faite de fractions séparées par les opérateurs '+'ou '-'.

Le nombre de fractions dans l'expression est arbitraire.

Chacun des 6 lignes est un exemple d'entrée valide expression:

1/2 + 3/4
1/2 -5/7+3/5
355/113
3    /9-21/    -7
4/7-5/-8
-2/-3+7/5

*Le problème que je rencontre est que lorsque je lance mon programme, il a une surcharge d'exploitation d'erreur: erreur: surcharge d'opérateur<< " doit être un opérateur binaire (a 3 paramètres)*

  /Users/Spicycurryman/Desktop/ECS40/hw1/fraction.cpp:61:22: error: overloaded 'operator<<' must be a binary operator (has 3 parameters)
  ostream& Fraction::operator<<(ostream &os, Fraction& n)
                     ^
/Users/Spicycurryman/Desktop/ECS40/hw1/fraction.cpp:80:22: error: overloaded 'operator>>' must be a binary operator (has 3 parameters)
  istream& Fraction::operator>>(istream &os, Fraction& n)

Je ne comprends pas pourquoi c'est une erreur.

Mon code est ci-dessous:

FICHIER CPP

#include "Fraction.h"
Fraction::Fraction(int a, int b)
{
}
int Fraction::find_gcd (int n1, int n2) 
{
int gcd, remainder;
remainder = n1 % n2; 
while ( remainder != 0 )
{
n1 = n2;
n2 = remainder; 
remainder = n1 % n2; 
} 
gcd = n2; 
return (gcd);
}
void Fraction::reduce_fraction(int nump,  int denomp) 
{
this->nump = nump;
this->denomp = denomp; 
int gcd;   
gcd = find_gcd(nump, denomp);
nump = nump / gcd;
denomp = denomp / gcd;
if ((denomp<0 && nump < 0 ))
{
denomp*=-1;
nump*=-1;
}
else if (denomp < 0 &&  nump >0){
denomp*=-1;
}
if ( denomp ==0) {
throw invalid_argument( "Error: zero denominator" );
}   
}
Fraction& Fraction::operator+(const Fraction& n) {
denom = denomp * n.denom;
numera = (nump * n.numera) + (n.denom * n.nump);
return (*this);
}
Fraction& Fraction::operator-(const Fraction& n) {
denom = denomp * n.denom;
numera = (nump * n.numera) - (n.denom* n.nump);
return (*this);
}
ostream& Fraction::operator<<(ostream &os, Fraction& n)
{
if (n.numera == 0)
{
cout << 0 << endl;
return os;
}
else if (n.numera == n.denom)
{
cout << 1 << endl;
return os;
}
else
{
cout << n.numera << '/' << n.denom << endl;
return os;
}
}
istream& Fraction::operator>>(istream &os, Fraction& n)
{
char slash = 0;
return os >> n.numera >> slash >> n.denom;
}

Fichier D'En-Tête

#ifndef FRACTION_H
#define FRACTION_H
#include <iostream>
#include <stdexcept>
using namespace std;
class Fraction{
public: 
Fraction(int a, int b);
int fraction(int a,int b);
int find_gcd(int n1, int n2); 
void reduce_fraction(int nump,  int denomp);
Fraction& operator+(const Fraction& n);
Fraction& operator-(const Fraction& n);
friend ostream& operator<<(ostream &os, const  Fraction& n);
friend istream& operator>>(istream &is, const Fraction& n);
private:
int denom;
int numera;
int denomp;
int nump;
};
#endif

FICHIER PRINCIPAL RPC

#include "Fraction.h"
#include <iostream>
using namespace std;
int main()
{
Fraction x(2,3);
Fraction y(6,-2);
cout << x << endl;
cout << y << endl;
cin >> y;
cout << y << endl;
Fraction z = x + y;
cout << x << " + " << y << " = " << z << endl;
}

Je sais que les opérateurs sont des fonctions de membre et un membre de la fonction prend un implicite premier paramètre, ce qui me opérateurs maintenant prend trois paramètres, il peut être fixe étant un non-membre de la fonction; toutefois, cela ne fonctionnerait pas dans ce programme. Comment exactement dans mon cas, j'ai corrigé pour que le programme pourrait fonctionner?

Merci beaucoup!

source d'informationauteur Rohit Tigga