Visualizzazione dei risultati da 1 a 8 su 8

Discussione: classe template - C++

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211

    classe template - C++

    salve, sn riuscito a implementare la classe lista e funziona. ora, però, sto cercando di renderla una classe template ma nel metodo primolista mi da un errore di compilazione. questo è il codice della calsse:

    listap.h
    codice:
    #ifndef _LISTAP_H
    #define _LISTAP_H
    
    #include <iostream>
    
    using namespace std;
    
    template<class T> class listap
    {
        private:
            typedef int tipoelem;
            struct nodo
            {
                nodo *precedente;
                T elemento;
                nodo *successivo;
            };
            typedef T tipoelem;
        public:
            typedef nodo * posizione;
            posizione sentinella;
                
            listap();
            void crealista();
            bool listavuota();
            posizione primolista();
            bool finelista(posizione);
            void inslista(posizione &, tipoelem);
            void canclista(posizione &);
            tipoelem leggilista(posizione);
            void scrivilista(posizione &, tipoelem);
            posizione predlista(posizione);
            posizione succlista(posizione);
    };
    
    #endif
    listap.cpp
    codice:
    #include "listap.h"
    template<class T> listap<T>::listap()
    {
    	crealista();
    }
    
    template<class T> void listap<T>::crealista()
    {
    	sentinella = (posizione)malloc(sizeof(nodo));
        tipoelem elemnullo = 0;
    	sentinella->precedente = sentinella;
    	sentinella->elemento = elemnullo;
    	sentinella->successivo = sentinella;
    }
    
    template<class T> bool listap<T>::listavuota()
    {
    	return((sentinella->precedente == sentinella) && (sentinella->successivo == sentinella));
    }
    
    template<class T> listap::posizione listap<T>::primolista()
    {
        return(sentinella->successivo);
    }
    
    template<class T> bool listap<T>::finelista(posizione p)
    {
        return(p->successivo == sentinella);
    }
    
    template<class T> void listap<T>::inslista(posizione &p, tipoelem elem)
    {
        posizione temp = new nodo;
        temp->elemento = elem;
        temp->precedente = p->precedente;
        temp->successivo = p;
        p->precedente->successivo = temp;
        p->precedente = temp;
        p = temp;
    }
    
    template<class T> void listap<T>::canclista(posizione &p)
    {
        posizione temp = p;
        p->precedente->successivo = p->successivo;
        p->successivo->precedente = p->precedente;
        p = p->successivo;
        delete(temp);
    }
    
    template<class T> listap<T>::tipoelem listap::leggilista(posizione p)
    {
        return(p->elemento);
    }
    
    template<class T> void listap<T>::scrivilista(posizione &p, tipoelem elem)
    {
        p->elemento = elem;
    }
    
    template<class T> listap<T>::posizione listap::predlista(posizione p)
    {
        return(p->precedente);
    }
    
    template<class T> listap<T>::posizione listap::succlista(posizione p)
    {
        return(p->successivo);
    }
    l'errore che mi viene notificato è il seguente:
    `template<class T> class listap' used without template parameters

    ho provato a cercare dei suggerimenti in rete ma non sn riuscito a risolvere il problema. in cosa avrei sbagliato???

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211
    raga quando compilo il codice mi da il seguente errore alla linea 21 (relativo al metodo primolista):

    21 C:\Dev-Cpp\esercizi\liste\listap.cpp expected constructor, destructor, or type conversion before "listap" .

    che errore avrei commesso??? e, in particolare, perchè ai metodi precedenti al quest'ultimo non mi ha segnalato errori???

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Salta all'occhio questo:
    codice:
    template<class T> typename listap<T>::posizione listap<T>::primolista()
    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
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211
    ooooooohhhhhh!!!! grazie 1000.

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Prego. Attento agli errori di linking.
    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.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211
    ecco infatti ho riscontrato errori di linking!!! a cosa ssono dovuti?

  7. #7
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    La definizione e l'implementazione delle classi template non può essere divisa in due file. Devi mettere tutto in un unico file .h
    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.

  8. #8
    Una curiosità: dato che utilizzi il C++, perchè non utilizzare new/delete per la gestione dinamica della memoria?

    edit: e se non vado errato, non gestisci la deallocazione della memoria, ad esempio utilizzando il distruttore di classe


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.