* He seguido las indicaciones de este mensaje (mismo problema que el mio):
http://listas.fi.uba.ar/pipermail/programacion/2005-April/001831.html
para poder implementar (por fuera) una sobrecarga de operador (<< salida en este caso) como friend en un template...
Y puse (tal como se dijo en el mensaje) el <tipo> despues del operador y antes de los parametros para que no diera avisos al compilar la libreria (en la declaracion, y no en la implementacion). (los avisos salen en el mensaje, no se si aporta, no lo pongo para no liar el post)
Código:
template <class algo> class Lista { private: .... public: .... friend ostream& operator<< <algo>(ostream& sout, Lista<algo>& lis); }; .... template <class algo> ostream& operator<< (ostream& os, Lista<algo>& lis) { os << lis->DatosDelNodo << "cosas\n"; //realmente hago muchas otras cosas por eso quiero declararlo aparte. return sout; }
* Bien, compilo mi libreria y todo muy bonito y 0 problemas. El tema es cuando voy a usar dicha libreria en un ejemplo real, obtengo estos errores:
(Que conste que he buscado en internet información de templates, sobrecargas o algo en relación que tuviese y solo encontré aquel mensaje en referencia a mi pregunta)
lista.h: In instantiation of ‘Lista<TipoEjemplo>’:
ejemplo.cpp:135: instantiated from here
lista.h:78: error: el id de plantilla ‘operator<< <TipoEjemplo>’ para ‘std::basic_ostream<char, std::char_traits<char> >& operator<<(std::basic_ostream<char, std::char_traits<char> >&, Lista<TipoEjemplo>&)’ no coincide con ninguna declaración de plantilla
Haciendo uso de esta manera en el ejemplo.cpp
Lista<TipoEjemplo> te;
//hago cosas
cout << te;
Creo que ando muy equivocado. Agradecería respuestas ;)
* Originalmente lo tenía así (implementación dentro de la declaración), pero viendo que necesitaba hacer bastantes cosas decidí "separarlo".
Código:
template <class algo> class Lista { .... friend ostream& operator<< (ostream& sout, Lista<algo>& L) { //muchas cosas return sout;} }; //En ejemplo.cpp Lista<TipoEjemplo> te; //hago cosas cout << te; //0 problemas.