Hola, estoy creando una clase pila y de momento iba todo bien, pero cuando me he puesto a sobrecargar el operador <<... no encuentro solución. Estuve mirando un rato por google y hay algo de información pero no entiendo muy bien... Aver si alguien me puede ayudar. Dejo el código para que se vean bien los errores al compilar:
Código C++:
Ver original#include <iostream>
#include <new>
using namespace std;
template< class T >
class PILA_DATOS{
template< class t > friend class PILA;
private:
T nodo;
PILA_DATOS< T > *ptrPilaSiguiente;
};
template< class T >
class PILA{
friend ostream &operator<< <T>( ostream &, const PILA< T > & );
public:
PILA();
PILA< T > &empujarPila ( const T& );
PILA< T > &sacarPila ();
private:
PILA_DATOS< T > *ptrPila;
bool estaVacia ();
};
template< class T >
PILA< T >::PILA (){
ptrPila = NULL;
}
template< class T >
bool PILA< T >::estaVacia (){
return ( ptrPila == NULL ? true : false );
}
template< class T >
PILA< T > &PILA< T >::empujarPila ( const T &a ){
if ( estaVacia () ){
ptrPila = new PILA_DATOS< T >;
ptrPila->nodo = a;
ptrPila->ptrPilaSiguiente = NULL;
}
else{
PILA_DATOS< T > *nuevaPila;
nuevaPila= new PILA_DATOS< T >;
nuevaPila->nodo = a;
nuevaPila->ptrPilaSiguiente = ptrPila;
ptrPila = nuevaPila;
}
return *this;
}
template< class T >
PILA< T > &PILA< T >::sacarPila (){
PILA_DATOS< T > *temp;
temp = ptrPila;
ptrPila = ptrPila->ptrPilaSiguiente;
delete temp;
return *this;
}
template< class T >
ostream &operator<<( ostream &salida, const PILA< T > &pila ){
PILA_DATOS< T > *a = pila.ptrPila;
while ( a != NULL ){
salida << a->nodo << "->";
a = a->ptrPilaSiguiente;
}
salida << "NULL\n";
return salida;
}
int main (){
PILA< int > a;
a.empujarPila (2).empujarPila (3).empujarPila(23).empujarPila (25);
cout << a;
a.sacarPila().sacarPila();
cout << a;
return 0;
}
Muchas gracias!