Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [C++] Template e overload <<

    Ho fatto una classe template lista e sto cercando di implementare l'overload dell'operatore <<, solo che mi da i seguenti errori (c++ builder)
    codice:
    [ILINK32 Error] Error: Unresolved external 'operator <<(std::basic_ostream<char, std::char_traits<char> >&, const Lista<int>&)' referenced from C:\USERS\VINCENZO\DESKTOP\LISTAOOP\DEBUG\MAIN_LL_OOP.OBJ
    Questo è il codice: (solo delle parti significative, sennò diventa lungo...
    codice:
    template <class T>
    class Lista{
    	friend ostream& operator << (ostream&,const Lista<T>&);
    	friend istream& operator >> (istream&,Lista<T>&);
    	friend Lista operator +(const Lista&,const Lista&);  //non implementato ancora
    public:
    	Lista();  
    	Lista(const Lista&); 
    	~Lista();  
    
    	bool inserisciInTesta(const T&);   
    	bool inserisciInCoda(const T&);  
    	bool inserisciPostoI(const T&,int i);   
    
    	bool rimuoviInTesta(T&);  
    	bool rimuoviInCoda(T&);   
    	bool rimuoviPostoI(T&,int i); 
    
    	bool getInfoPostoI(T&,int i) const;    
    
    	int getDim() const; 
    
    	bool operator ==(const Lista&);
    
    	void reset();    
    private:
    	Nodo<T> *testa;
    	int dim;
    };
    
    template <class T>
    ostream& operator <<(ostream& out,const Lista<T>& x)
    {
    	T valore;
    	for(int i=1;i<=x.getDim();i++)
    	{
    		x.getInfoPostoI(valore,i);
    		out<<valore<<' ';
    	}
    	return out;
    }
    Ma cosa sbaglio???
    Non riesco a capire perchè il linker non trova la funzione di overload dell'operatore <<

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Mancano i prototipi prima della dichiarazione della classe.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    in che senso? Cioè la classe Nodo è dichiarata e definita in un'altro file che si chiama Nodo.h

    Quando dichiaro la classe lista faccio
    template <class T>
    class Lista{
    ...
    ...
    };

    dove stà l'errore? esistono i prototipi delle classi?

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Credo che intenda che mancano i prototipi degli operatori, che sono dopotutto funzioni (o almeno così ho capito io ^^)

    codice:
    template <class T>
    ostream& operator <<(ostream& out,const Lista<T>& x);
    
    template <class T>
    ostream& operator >>(istream& out,const Lista<T>& x);
    
    template <class T>
    class Lista{
    	friend ostream& operator << (ostream&,const Lista<T>&;
    	friend istream& operator >> (istream&,Lista<T>&;
    	friend Lista operator +(const Lista&,const Lista&;  //non implementato ancora
    public:
    	...
    };
    
    template <class T>
    ostream& operator <<(ostream& out,const Lista<T>& x)
    {
    	...
    }
    
    template <class T>
    ostream& operator >>(istream& out,const Lista<T>& x)
    {
    	...
    }
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  5. #5
    Originariamente inviato da Ippo343
    Credo che intenda che mancano i prototipi degli operatori, che sono dopotutto funzioni (o almeno così ho capito io ^^)

    codice:
    template <class T>
    ostream& operator <<(ostream& out,const Lista<T>& x);
    
    template <class T>
    ostream& operator >>(istream& out,const Lista<T>& x);
    
    template <class T>
    class Lista{
    	friend ostream& operator << (ostream&,const Lista<T>&;
    	friend istream& operator >> (istream&,Lista<T>&;
    	friend Lista operator +(const Lista&,const Lista&;  //non implementato ancora
    public:
    	...
    };
    
    template <class T>
    ostream& operator <<(ostream& out,const Lista<T>& x)
    {
    	...
    }
    
    template <class T>
    ostream& operator >>(istream& out,const Lista<T>& x)
    {
    	...
    }
    Così non funziona...

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Cosa vuol dire "non funziona"?
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    151
    La dichiarazione della funzione:

    codice:
    template <class T>
    ostream& operator >>(istream& out,const Lista<T>& x)
    {
    	...
    }
    è in un file.h oppure in un file.cpp ?

  8. #8
    Originariamente inviato da senise
    La dichiarazione della funzione:

    codice:
    template <class T>
    ostream& operator >>(istream& out,const Lista<T>& x)
    {
    	...
    }
    è in un file.h oppure in un file.cpp ?
    Tutto in un file .h, perchè con i template non si possono separare l'implementazione e la dichiarazione

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    151
    non si possono separare l'implementazione e la dichiarazione
    Infatti credevo fosse questo il problema

  10. #10
    Originariamente inviato da Ippo343
    Cosa vuol dire "non funziona"?
    Aggiungendo i prototipi come mi hai detto tu mi da i seguenti errori:

    codice:
    /*template <class T>
    class Lista;*/
    
    template <class T>
    ostream& operator << (ostream&,const Lista<T>&);
    
    template <class T>
    istream& operator >> (istream&,Lista<T>&);
    
    template <class T>
    class Lista{
    	friend ostream& operator << (ostream&,const Lista<T>&);
    	friend istream& operator >> (istream&,Lista<T>&);
    codice:
    [BCC32 Error] Lista.h(16): E2410 Missing template parameters for friend template 'ostream &(ostream &,const Lista<T> &)'
    [BCC32 Error] Lista.h(17): E2410 Missing template parameters for friend template 'istream &(istream &,Lista<T> &)'
    [BCC32 Error] Main_LL_OOP.cpp(15): E2335 Overloaded 'operator istream & >> <int>(istream &,Lista<int> &)' ambiguous in this context
    [BCC32 Error] Main_LL_OOP.cpp(16): E2335 Overloaded 'operator ostream & << <int>(ostream &,const Lista<int> &)' ambiguous in this context
    [BCC32 Error] Main_LL_OOP.cpp(22): E2335 Overloaded 'operator ostream & << <int>(ostream &,const Lista<int> &)' ambiguous in this context

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.