|
|||||||
|
|
|
![]() |
|
|
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: 07:22.



















