Ciao ragazzi, sono alle prese con POO in C++, ho un problema per quanto riguarda le ridefinizione degli operatori in c++. Allego il file.h, il codice degli operatori e il messaggio di errore che ricevo.
Ovviamente la classe fa riferimento anche ad un'altra classe Studente, che non allego poichè superflua rispetto al problema che ho. Il messaggio di errore che ricevo è il seguente:
no match for operator >> ( operand types are ' std::istream and 'Studente')
Ho provato a cercare su altri forum, ma non sono ancora riuscito a capire il perchè di questo errore.
#ifndef UNIVERSITA_H
#define UNIVERSITA_H
#include"Studente.h"
class Universita
{
friend std::istream& operator>>(istream&, Universita &);
friend std::ostream& operator<<(ostream&,const Universita &);
private:
string nome;
Studente* studenti;
unsigned* matricole;
unsigned size;
unsigned capacity;
public:
Universita();
Universita(string,unsigned,unsigned,Studente*,unsigned*);
Universita(const Universita&);
~Universita();
Universita &operator=(const Universita&);
const string& getCodiceFiscaleStudente(unsigned);
void aggiungiStudente(const Studente&,unsigned);
bool isIscritto(const Studente &);
const Studente& operator[] (unsigned) const;
unsigned getSize() const;
string getNomeUniversita() const;
};
#endif // UNIVERSITA_H
std::istream& operator >>(std::istream& i,Universita& u)
{
i>>u.nome;
i>>u.capacity;
i>>u.size;
u.studenti = new Studente[u.capacity];
u.matricole = new unsigned[u.capacity];
for(int j=0;j<u.size;j++)
{
i>>u.studenti[j];
i>>u.matricole[j];
}
return i;
}
std::ostream& operator <<(ostream& o,const Universita& u)
{
o<<u.nome;
o<<u.capacity;
o<<u.size;
for(int i=0;i<u.size;i++)
{
o<<u.studenti[i];
o<<u.matricole[i];
}
return o;
}