PDA

View Full Version : [C++] Funzione amica e template


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

Don[ITA]
09-06-2011, 09:34
Se come credo quella funzione deve stampare la tua raccolta, allora devi modificare T& con Raccolta&.

friend std::ostream& operator<<(std::ostream&, const Raccolta&);

masteryuri
09-06-2011, 09:55
Si in effetti, ma sussiste lo stesso errore...

Don[ITA]
09-06-2011, 11:14
Errore mio :P

template<class U>
friend std::ostream& operator<<(std::ostream&, const Raccolta<U>&);

masteryuri
09-06-2011, 12:51
cioé la dichiaro template utilizzando un altro tipo U, poi come faccio a far capire al compilatore che T e U alla fine sono lo stesso tipo?

Don[ITA]
09-06-2011, 13:33
Dai un occhio qui:
http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Ffriends_and_templates.htm