Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++] Typedef e templates

    Sto studiando le classi e le funzioni modello.
    Ho questo listato, preso pari passo dal libro di Savy "Da C++ a UML".

    codice:
    #ifndef PILA_H
    #define PILA_H
    
    template <class E> class Record
    {
    	private:
    		E elem;
    		Record<E>* prec;
    }
    
    typedef Record<E>* P;
    
    template <class E>
    class Pila
    {
    	public:
    		Pila() {p=0;}
    		void top(E& e) const {e=p->elem;}
    		bool empty() const {return (p==0);}
    		bool full() const {return false;}
    		void push(const E e);
    		void pop(E& e);
    		~Pila();
    
    	private:
    		P p;
    
    }
    #endif
    Ho evidenziato in grassetto la riga che il compilatore non accetta, restituendomi come errore il seguente.

    Pila.h:11: error: template declaration of ‘typedef’

    E' una notazione obsoleta o un semplice errore?
    Ad ogni modo, come risolvo il problema? Cercando in rete trovo documentazione vaga e disordinata circa template e typedef, inoltre sul libro la cosa non viene approfondita a quanto pare.
    /*NO COMMENT*/

  2. #2
    Va beh non mi ero accorto che mancavano i ; alla fine della dichiarazione delle classi. Ora che li ho aggiunti ecco i nuovi errori:


    Pila.h:11: error: ‘E’ was not declared in this scope
    Pila.h:11: error: template argument 1 is invalid
    Pila.h:11: error: invalid type in declaration before ‘;’ token
    /*NO COMMENT*/

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Sposta il typedef all'interno di Pila, altrimenti il compilatore non ha idea di cosa sia E.
    Inoltre i dati di Record devono essere accessibili a Pila, mentre adesso non lo sono.
    Hai tre modi di farlo:
    1) rendi i dati di pila pubblici;
    2) fornisci funzioni di accesso;
    3) rendi pila friend di Record (preferibile).
    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.

  4. #4
    Giusto, ho scelto la soluzione 3. Grazie
    /*NO COMMENT*/

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.