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

    realizzazione lista con cursori

    ciao a tutti, sto realizzando la struttura dati lista con i cursori, una via di mezzo tre realizzazione con vettore e con puntatore. sono ancora all'inizio e ho creato il costruttore e il metodo crealista. facendo il test per vedere se l'oggetto viene creato mi dà errore. posto i codici.

    listac.h
    codice:
    #ifndef listac_h
    #define listac_h
    
    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    const int lungvet = 100;
    
    template<class tipoelem>
    class listac
    {
       public:
          typedef int posizione;
          listac();
          void crealista();
       private:
          struct nodo
          {
             posizione precedente;
             tipoelem elemento;
             posizione successivo;
          };
          static nodo spazio[lungvet];
          static posizione listalibera;
          int lunglistalibera;
          posizione lista;
          
          void inizializzalistalibera()
          {
             for(int i = 0; i < (lungvet - 1); i++)
             {
                if(i == 0)
                {
                   spazio[i].precedente = lungvet - 1;
                   spazio[i].successivo = i + 1;
                }
                else
                {
                   spazio[i].precedente = i - 1;
                   spazio[i].successivo = i + 1;
                }
             }
             spazio[lungvet - 1].precedente = lungvet - 2;
             spazio[lungvet - 1].successivo = 0;
             listalibera = 0;
          }
          
    };
    
    #endif
    
    template<class tipoelem>
    listac<tipoelem>::listac()
    {
       this->crealista();
    }
    
    template<class tipoelem>
    void listac<tipoelem>::crealista()
    {
       lista = listalibera;
       listalibera = spazio[listalibera].successivo;
       spazio[listalibera].precedente = spazio[lista].precedente;
       spazio[lista].precedente = lista;
       spazio[lista].successivo = lista;
    }
    testlistac.cpp
    codice:
    #include "listac.h"
    #include <iostream>
    #include <stdlib.h>
    
    using namespace std;
    
    int main()
    {
       listac<int> list;
       
       system("pause");
       return 0;
    }
    gli errori che mi vengono visualizzati sono i seguenti:
    [Linker error] undefined reference to `listac<int>::listalibera'
    [Linker error] undefined reference to `listac<int>::listalibera'
    [Linker error] undefined reference to `listac<int>::spazio'
    [Linker error] undefined reference to `listac<int>::listalibera'
    [Linker error] undefined reference to `listac<int>::listalibera'
    [Linker error] undefined reference to `listac<int>::spazio'
    [Linker error] undefined reference to `listac<int>::spazio'
    [Linker error] undefined reference to `listac<int>::spazio'
    [Linker error] undefined reference to `listac<int>::spazio'

    cosa devo correggere???

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

    C++ errore in run time della classe lista con cursori

    ciao a tutti, sono riuscito a creare la struttura dati lista mediante i cursori. in pratica la struttura viene compilata correttamente però il test va in crash. ecco i codici da me creati:

    listacur.h
    codice:
    #ifndef listacur_h
    #define listacur_h 
    
    #include <stdlib.h>
    #include <iostream>
    
    using namespace std;
    const int dimvettore=100;
    
    template <class tipoelem> //classe tempalate per la lista
       class listacur 
    {  
          typedef int pos;       
    
          public:
          listacur();
          void crealista();
          /*bool listavuota();
          tipoelem leggilista (pos);
          void scrivilista (tipoelem,pos);
          pos primolista();
          bool finelista (pos);
          pos suclista (pos);
          pos predlista(pos);
          void inslista (tipoelem,pos);
          void canclista (pos);*/
          
          private:
                  
          typedef struct cella {  //struttura elemento lista
          tipoelem  elem; 
          int       prec;
          int       succ; } cella;
          int lunglista;
          
          static cella *spazio;
          static pos listalibera;
          pos lista;
          static bool inizializzato;
          
          static cella * inizializza();
                     
    };
    #endif
    
    template<class tipoelem>
    typename listacur<tipoelem>::cella *listacur<tipoelem>::inizializza()
    {
               if (!inizializzato)
               {
                  spazio[0].prec= dimvettore-1;
                  spazio[0].succ= 1;
                  for (int i=1;i<dimvettore;i++)
                  {
                      spazio[i].prec=(i-1)%dimvettore;
                      spazio[i].succ=(i+1)%dimvettore;
                  }
                  inizializzato=true; 
                  return(spazio);
               }
    }
    
    template<class tipoelem>
    typename listacur<tipoelem>::cella *listacur<tipoelem>::spazio = listacur<tipoelem>::inizializza();
    
    template<class tipoelem>
    typename listacur<tipoelem>::pos listacur<tipoelem>::listalibera = 0;
    
    template <class tipoelem> //INIZIALIZZATO
    bool listacur<tipoelem>::inizializzato=false;
      
    template <class tipoelem> 
    listacur<tipoelem>::listacur()  //COSTRUTTORE
    {
     crealista();        
    }
    
    template <class tipoelem>
    void listacur<tipoelem>::crealista() //CREALISTA
    {
      lista=listalibera;
      spazio[lista].prec=lista;
      spazio[lista].succ=lista;
      listalibera=spazio[listalibera].succ;         
    }
    testlistacur.cpp
    codice:
    #include "listacur.h"
    #include <stdlib.h>
    #include <iostream>
    
    using namespace std;
    
    int main() 
    {
       listacur<int> lista;
       system ("PAUSE");
       return 0; 
    }
    come detto prima, il test va in crash. dove ho sbagliato???
    sperando che qualcuno risponda vi saluto e vi auguro una buona giornata.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Va in crash nella linea

    spazio[0].prec= dimvettore-1;

    perché spazio[0] non esiste (non è stato mai allocato).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    211
    grazie 1000 oregon!!!

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.