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

    [C++] Variabile non riconosciuta

    Salve,
    ho un errore al quale non trovo soluzione. Ho dichiarato una classe di tipo nodo e dopo di che ho definito un vettore di nodi. Ma non mi viene riconosciuta. L'errore segnalato è il seguente: "In file included from testl.cpp / ISO C++ forbids declaration of `nodo' with no type / expected `;' before '<' token"
    Chi è così gentile da aiutarmi?

    Eccovi i codici:
    classe nodo
    codice:
    #ifndef nodo_h 
    #define nodo_h
    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    template<class T>
    
    class nodo 
    
    {
     public:
            nodo();
            void scrivielem(T);
            T leggielem();
            void scriviprec(nodo*);
            void scrivisucc(nodo*);
            nodo* leggiprec();
            nodo* leggisuc();
            
            
     private:
             T elemento;
             nodo *precedente;
             nodo *successivo;
          
    };
    #endif
          
    template<class T> // COSTRUTTORE
    nodo<T>::nodo() 
    {
      elemento= 0;
      precedente=NULL;
      successivo=NULL;
    }
     
     
    template<class T> //SCRIVIELEM
    void nodo<T>::scrivielem(T elem)
    {
      elemento=elem;
    }
     
    template<class T> // LEGGIELEM
    T nodo<T>::leggielem()
    {
      return (elemento);
    }
     
    template<class T> //SCRIVISUCC
    void nodo<T>::scrivisucc (nodo* succ)
    {
      successivo=succ;
    }
     
    template<class T> //SCRIVIPREC
    void nodo<T>::scriviprec (nodo* prec)
    {
      precedente=prec;        
    }
                
    template<class T> //LEGGIPREC
    nodo<T>::nodo<T>* nodo<T>::leggiprec()
    {
      return(precedente);
    }          
            
    template<class T> //LEGGISUC
    nodo<T>::nodo<T>* nodo<T>::leggisuc()
    {
      return (successivo);
    }
    lista
    codice:
    #ifndef listavet_h
    #define listavet_h 
    
    #include <stdlib.h>
    #include <iostream>
    #include <assert.h>
    #include "lista.h"
    
    using namespace std;
    
    template <class tipoelem>
    class listavet : public lista<tipoelem, int>
    {   
          public:
                 
                 typedef int posizione;
                 listavet(int); 
                 void crealista();
                 bool listavuota();
                 tipoelem leggilista(posizione);
                 void scrivilista(tipoelem, posizione);
                 posizione primolista();
                 bool finelista(posizione);
                 posizione succlista(posizione);
                 posizione preclista(posizione);
                 void inslista(tipoelem, posizione);
                 void canclista(posizione);
          private:
                nodo<tipoelem> *vettore;
                int maxdim;
                int lunglista;
          };
    #endif
          
    
    template <class tipoelem> //costruttore
    listavet <tipoelem>::listavet(int dimensione) 
    {
      maxdim=dimensione;    
      crealista();
    }
             
    template <class tipoelem> //crealista
    void listavet <tipoelem>::crealista() 
    {
      vettore=new nodo<tipoelem>[maxdim];
      lunglista=0;         
    }
             
    template <class tipoelem> //listavuota
    bool listavet<tipoelem>::listavuota() 
    {
      return (lunglista == 0);
    }
         
    template <class tipoelem> //primolista
    typename listavet<tipoelem>::posizione listavet<tipoelem>::primolista()
    {
      return (0);
    }
         
    template <class tipoelem> //leggilista
    tipoelem listavet<tipoelem>::leggilista(typename listavet<tipoelem>::posizione p)
    { 
      assert ( (p>=0) && (p<lunglista) && (!listavuota()) ); 
      return (vettore[p].leggielem());
    }
    
    template <class tipoelem> //scrivilista
    void listavet<tipoelem>::scrivilista(tipoelem elem, typename listavet<tipoelem>::posizione p)
    {
     assert ((p>=0)&&(p<=lunglista));
     vettore[p].scrivielem(elem);
    }
         
    template <class tipoelem> // finelista
    bool listavet<tipoelem>::finelista(typename listavet<tipoelem>::posizione p) 
    {
     assert ((p>=0)&&(p<=(lunglista)));
     return(p==lunglista); 
    }
         
         
    template <class tipoelem> //succlista
    typename listavet<tipoelem>::posizione listavet<tipoelem>::succlista(typename listavet<tipoelem>::posizione p) 
    {
      assert((p>=0)&&(p<(lunglista)));     
      return (p+1);
    }
             
    template <class tipoelem> //preclista
    typename listavet<tipoelem>::posizione listavet<tipoelem>::preclista(typename listavet<tipoelem>::posizione p)
    {
     assert((p>=1)&&(p<=lunglista));
     return (p-1);
     
    }
             
    template <class tipoelem> // inslista
    void listavet<tipoelem>::inslista(tipoelem elem, typename listavet<tipoelem>::posizione p) 
    { 
      assert ((p>=0)&&(p<=lunglista));
      if (maxdim>lunglista)
        {
          for (int i=lunglista;i>p;i--)
          vettore[i]=vettore[i-1];
               
          vettore[p].scrivielem(elem);
          lunglista++;
        }
    }
    
    template <class tipoelem> //canclista
    void listavet<tipoelem>::canclista(typename listavet<tipoelem>::posizione p) 
    {
      assert ((p>=0)&&(p<lunglista));
      if (p<lunglista-1)  
        {
          for(int i=p;i<=lunglista;i++)
          vettore[i]=vettore[i+1];
        }       
      lunglista--;  
    }
    test
    codice:
    #include <stdlib.h>
    #include <iostream>
    #include "listavet.h"
    #include "lista.h"
    #include "nodo.h"
    
    using namespace std;
    
    int main()
    {
      listavet<int> list(10);
      list.testliste();
      
      system ("PAUSE");
      return 0;      
    }

  2. #2
    Su che riga ti dà l'errore?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    C'è un errore che fai dappertutto, ad esempio qua:

    codice:
    private:
             T elemento;
             nodo *precedente;
             nodo *successivo;
    La classe nodo deve avere un tipo,devi scrivere:

    codice:
    private:
             T elemento;
             nodo<T> *precedente;
             nodo<T> *successivo;

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 © 2025 vBulletin Solutions, Inc. All rights reserved.