Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211

    C++ chiamata del metodo canclista

    ciao a tutti, ho creato la struttura lista con puntatori. nel test della lista il metodo canclista, che elimina un nodo della lista, mi dà errore. posto i codici:

    nodo.h
    codice:
    #ifndef _nodo_h
    #define _nodo_h
    
    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    template<class T>
    class nodo
    {
       public:
          nodo();
          void setprec(nodo *);
          void setelem(T);
          void setsuc(nodo *);
          nodo *getprec();
          T getelem();
          nodo *getsuc();
       private:
          nodo *precedente;
          T elemento;
          nodo *successivo;
    };
    
    #endif
    
    template<class T>
    nodo<T>::nodo()
    {
       precedente = NULL;
       elemento = 0;
       successivo = NULL;
    }
    
    template<class T>
    void nodo<T>::setprec(nodo *prec)
    {
       precedente = prec;
    }
    
    template<class T>
    void nodo<T>::setelem(T elem)
    {
       elemento = elem;
    }
    
    template<class T>
    void nodo<T>::setsuc(nodo *succ)
    {
       successivo = succ;
    }
    
    template<class T>
    nodo<T>::nodo<T> *nodo<T>::getprec()
    {
       return(precedente);
    }
    
    template<class T>
    T nodo<T>::getelem()
    {
       return(elemento);
    }
    
    template<class T>
    nodo<T>::nodo<T> *nodo<T>::getsuc()
    {
       return(successivo);
    }
    listap.h
    codice:
    #ifndef _listap_h
    #define _listap_h
    
    #include "nodo.h"
    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    
    using namespace std;
    
    template<class tipoelem>
    class listap
    {
       public:
          typedef nodo<tipoelem> *posizione;
               
          listap();      
          void crealista();
          bool listavuota();
          posizione primolista();
          bool finelista(posizione);
          tipoelem leggilista(posizione);
          void scrivilista(posizione, tipoelem);
          posizione succlista(posizione);
          posizione predlista(posizione);
          void inslista(posizione &, tipoelem);
          void canclista(posizione &);
       private:
          nodo<tipoelem> cella;
    };
    
    #endif
    
    template<class tipoelem>
    listap<tipoelem>::listap()
    {
       crealista();
    }
    
    template<class tipoelem>
    void listap<tipoelem>::crealista()
    {
       cella.setprec(&cella);
       cella.setsuc(&cella);
       cella.setelem(0);
    }
    
    template<class tipoelem>
    bool listap<tipoelem>::listavuota()
    {
       return((cella.getprec() == &cella) && (cella.getsuc() == &cella));
    }
    
    template<class tipoelem>
    typename listap<tipoelem>::posizione listap<tipoelem>::primolista()
    {
       return(&cella);
    }
    
    template<class tipoelem>
    bool listap<tipoelem>::finelista(typename listap<tipoelem>::posizione pos)
    {
       return(pos->getsuc() == primolista());
    }
    
    template<class tipoelem>
    tipoelem listap<tipoelem>::leggilista(typename listap<tipoelem>::posizione pos)
    {
       return(pos->getelem());
    }
    
    template<class tipoelem>
    void listap<tipoelem>::scrivilista(typename listap<tipoelem>::posizione pos, tipoelem elem)
    {
       pos->setelem(elem);
    }
    
    template<class tipoelem>
    typename listap<tipoelem>::posizione listap<tipoelem>::succlista(typename listap<tipoelem>::posizione pos)
    {
       return(pos->getsuc());
    }
    
    template<class tipoelem>
    typename listap<tipoelem>::posizione listap<tipoelem>::predlista(typename listap<tipoelem>::posizione pos)
    {
       return(pos->getprec());
    }
    
    template<class tipoelem>
    void listap<tipoelem>::inslista(typename listap<tipoelem>::posizione &pos, tipoelem elem)
    {
       posizione temp = new nodo<tipoelem>;
       
       temp->setprec(pos->getprec());
       temp->setsuc(pos);
       (pos->getprec())->setsuc(temp);
       pos->setprec(temp);
       temp->setelem(elem);
       pos = temp;
    }
    
    template<class tipoelem>
    void listap<tipoelem>::canclista(typename listap<tipoelem>::posizione &pos)
    {
       posizione temp = pos;
       
       (pos->getsuc())->setprec(pos->getprec());
       (pos->getprec())->setsuc(pos->getsuc());
       pos = pos->getsuc();
       delete temp;
    }
    testlista.cpp
    codice:
    #include "listap.h"
    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int main()
    {
       listap<int> list;
       listap<int>::posizione pos = list.primolista();
       
       for(int i = 1; i < 10; i++)
       {
          list.inslista(pos, i);
          pos = list.succlista(pos);
       }
       
       pos = list.primolista();
       while(!list.finelista(pos))
       {
          cout << pos << "\t";
          cout << list.predlista(pos) << " " << list.leggilista(pos) << " " << list.succlista(pos) << "\n";
          pos = list.succlista(pos);
       }
       
       cout << "\n\n" << list.primolista() << "\n";
       
       list.canclista(list.primolista());
       
       while(!list.finelista(pos))
       {
          cout << pos << "\t";
          cout << list.predlista(pos) << " " << list.leggilista(pos) << " " << list.succlista(pos) << "\n";
          pos = list.succlista(pos);
       }
       
       system("pause");
       return 0;
    }
    lerrore che mi viene visualizzato è il seguente:

    28 C:\Dev-Cpp\esercizi\testlstap.cpp no matching function for call to `listap<int>::canclista(nodo<int>*)'

    perchè mi dà errore al metodo canclista mentre al metodo inslista va tutto bene???

    help me!!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211
    ragazzi vi prego aiutatemi, non riesco ad andare avanti.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Se usi DevC++ penso sia un suo bug (tra i tanti) ...

    Prova a cambiare IDE/compilatore
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211
    pur volendo cambiare ide, all'esame si userà il dev.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da pietrol83
    pur volendo cambiare ide, all'esame si userà il dev.


    Se scrivi

    codice:
       listap<int>::posizione tmppos = list.primolista();
       list.canclista(tmppos );
    probabilmente funziona ... ma è una pezza ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.