Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/08/2011, 04:13
Checho360
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años, 1 mes
Puntos: 3
Sobrecarga de << con template

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
  1. #include <iostream>
  2. #include <new>
  3. using namespace std;
  4.  
  5. template< class T >
  6. class PILA_DATOS{
  7.       template< class t > friend class PILA;
  8.       private:
  9.               T nodo;
  10.               PILA_DATOS< T > *ptrPilaSiguiente;
  11.              
  12. };
  13.  
  14. template< class T >
  15. class PILA{
  16.       friend ostream &operator<< <T>( ostream &, const PILA< T > & );
  17.       public:
  18.              PILA();
  19.              PILA< T > &empujarPila ( const T& );
  20.              PILA< T > &sacarPila ();
  21.       private:
  22.               PILA_DATOS< T > *ptrPila;
  23.               bool estaVacia ();
  24.              
  25. };
  26.  
  27. template< class T >
  28. PILA< T >::PILA (){
  29.      
  30.       ptrPila = NULL;
  31.      
  32. }
  33.  
  34. template< class T >
  35. bool PILA< T >::estaVacia (){
  36.      
  37.      return ( ptrPila == NULL ? true : false );
  38.      
  39. }
  40.  
  41. template< class T >
  42. PILA< T > &PILA< T >::empujarPila ( const T &a ){
  43.        
  44.         if ( estaVacia () ){
  45.              
  46.              ptrPila = new PILA_DATOS< T >;
  47.              ptrPila->nodo = a;
  48.              ptrPila->ptrPilaSiguiente = NULL;
  49.              
  50.         }
  51.        
  52.         else{
  53.              
  54.              PILA_DATOS< T > *nuevaPila;
  55.              nuevaPila= new PILA_DATOS< T >;
  56.              nuevaPila->nodo = a;
  57.              nuevaPila->ptrPilaSiguiente = ptrPila;
  58.              ptrPila = nuevaPila;
  59.              
  60.         }
  61.        
  62.         return *this;
  63.        
  64. }
  65.  
  66. template< class T >
  67. PILA< T > &PILA< T >::sacarPila (){
  68.      
  69.       PILA_DATOS< T > *temp;
  70.       temp = ptrPila;
  71.       ptrPila = ptrPila->ptrPilaSiguiente;
  72.       delete temp;
  73.       return *this;
  74.      
  75. }
  76.  
  77. template< class T >
  78. ostream &operator<<( ostream &salida, const PILA< T > &pila ){
  79.        
  80.         PILA_DATOS< T > *a = pila.ptrPila;
  81.         while ( a != NULL ){
  82.              
  83.               salida << a->nodo << "->";
  84.               a = a->ptrPilaSiguiente;
  85.              
  86.         }
  87.         salida << "NULL\n";
  88.         return salida;
  89.        
  90. }
  91.  
  92. int main (){
  93.    
  94.     PILA< int > a;
  95.     a.empujarPila (2).empujarPila (3).empujarPila(23).empujarPila (25);
  96.     cout << a;
  97.     a.sacarPila().sacarPila();
  98.     cout << a;
  99.    
  100.     getchar();
  101.    
  102.     return 0;
  103.    
  104. }

Muchas gracias!