|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2006
Città: Caserta
Messaggi: 1056
|
[C++] Funzione amica e template
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. Codice:
#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 }; Codice:
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 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Se come credo quella funzione deve stampare la tua raccolta, allora devi modificare T& con Raccolta&.
Codice:
friend std::ostream& operator<<(std::ostream&, const Raccolta&);
__________________
iMac 27" 5K |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Feb 2006
Città: Caserta
Messaggi: 1056
|
Si in effetti, ma sussiste lo stesso errore...
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Errore mio :P
Codice:
template<class U> friend std::ostream& operator<<(std::ostream&, const Raccolta<U>&);
__________________
iMac 27" 5K |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Feb 2006
Città: Caserta
Messaggi: 1056
|
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?
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Dai un occhio qui:
http://publib.boulder.ibm.com/infoce..._templates.htm
__________________
iMac 27" 5K |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:01.