Salve a tutti
Vorrei chiedere se qualcuno mi potrebbe dare una mano con le sottoclassi. In poche parole ho una superclasse per la gestione delle Pile che contiene solo metodi virtuali e il metodo di stampa (non virtuali). Non ho dichiarato la parte "private" in quanto le sottoclassi hanno attributi diversi. Una sottoclasse permette la gestione della pila con le liste e un'altra permette di gestirla con un vettore.

Il metodo di stampa ereditato dalle 2 sottoclassi dovrebbe avere all'interno una variabile di tipo "Pila" da utilizzare per salvarci temporaneamente i dati estratti dalla pila da stampare. Le classi sono state dichiarate in questo modo:

SUPERCLASSE
codice:
template <class T>
class Pila
{
  public:
    typedef T tipoelem;
   
    virtual void creaPila() =0;
    virtual bool pilaVuota() =0;
    virtual tipoelem leggiPila() =0;
    virtual void fuoriPila() =0;
    virtual void inPila(tipoelem a) =0;
 
    void stampaPila();
};
mentre le 2 sottoclassi sono:
PILA CON VETTORE
codice:
 
template <class T>
class pileV : public Pila<T>
{
   public:      
       
      typedef typename Pila<T>::tipoelem tipoelem;        
      pileV();
      void creaPila();
      bool pilaVuota();
      tipoelem leggiPila();
      void fuoriPila();
      void inPila(tipoelem);
      //void stampaPila();
   private:
       tipoelem *elementi;
       int MAXLUNGH;
       int testa;
};
PILA CON LISTA
codice:
 
template <class T>
class pileL : public Pila <T>
{
public:
     typedef typename Pila<T>::tipoelem tipoelem;        
     typedef typename ListaP<T>::posizione posizione;
     
     pileL();
     //~pileL();
     
     void creaPila();
     bool pilaVuota();
     tipoelem leggiPila();
     void fuoriPila();
     void inPila(tipoelem a);
          
private:
     ListaP<tipoelem> elementi;
	 int lung;
	 posizione testa;
};
Il metodo di stampa è il seguente:
codice:
template <class T>
void Pila<T>::stampaPila()
{
  Pila<T> l1; 
  while( !pilaVuota() )
  {
     cout << leggiPila() << endl;
     l1.inPila(leggiPila());
     fuoriPila();
  }
  
  while( !l1.pilaVuota() )
  {
     inPila(l1.leggiPila());
     l1.fuoriPila();
  }

}
Il problema è questo: nel metodo di stampa la dichiarazione della variabile l1 di tipo Pila<T> non è accettata. Come posso fare per generalizzare la variabile (in quanto la variabile è troppo "generale") ?