masteryuri
09-06-2011, 01:12
Ho questa classe, e vorrei ridefinire l'operatore <<.
Solitamente dichiaro friend la funzione, la pongo al di sopra delle sezioni public e private, e la definisco fuori dalla classe.
Il compilatore mi da un errore che mi sta facendo impazzire.
#include <string>
#include <iostream>
template <class T>
class Raccolta
{
friend std::ostream& operator << (std::ostream&, T&);
public:
Raccolta(const int);
~Raccolta();
void Inserimento(const T &); //inserisce un elemento nella raccolta
bool Duplicata(const T &); //vera se l'elemento è già presente
int Mancanti() {return (N-riempimento);} //fornisce il numero di elementi mancanti
void Chiusa(); //pone true in "terminata" se la raccolta è terminata
private:
std::string NomeRaccolta; //nome della raccolta
T * R; //vettore di elementi
int N; //numero massimo degli elementi
bool terminata; //vero se la raccolta è terminata
int riempimento; //elementi correntemente presenti
};
Raccolta.h:8: warning: friend declaration ‘std::ostream& operator<<(std::ostream&, T&)’ declares a non-template function
Raccolta.h:8: warning: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning
Solitamente dichiaro friend la funzione, la pongo al di sopra delle sezioni public e private, e la definisco fuori dalla classe.
Il compilatore mi da un errore che mi sta facendo impazzire.
#include <string>
#include <iostream>
template <class T>
class Raccolta
{
friend std::ostream& operator << (std::ostream&, T&);
public:
Raccolta(const int);
~Raccolta();
void Inserimento(const T &); //inserisce un elemento nella raccolta
bool Duplicata(const T &); //vera se l'elemento è già presente
int Mancanti() {return (N-riempimento);} //fornisce il numero di elementi mancanti
void Chiusa(); //pone true in "terminata" se la raccolta è terminata
private:
std::string NomeRaccolta; //nome della raccolta
T * R; //vettore di elementi
int N; //numero massimo degli elementi
bool terminata; //vero se la raccolta è terminata
int riempimento; //elementi correntemente presenti
};
Raccolta.h:8: warning: friend declaration ‘std::ostream& operator<<(std::ostream&, T&)’ declares a non-template function
Raccolta.h:8: warning: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here) -Wno-non-template-friend disables this warning