Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 13 su 13

Discussione: (c++)errori di link

  1. #11
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    60
    scusa puoi provare a compilare questo codice?...è quello di prima solo con le modifiche che mi hai suggerito...
    codice:
    //main.cpp
    #include "dizionario.h"
    #include <iostream>
    using namespace std;
    int main(){
    	
    	Dizionario<int,char> diz(10);
    	diz.InserisciChiave(2,'a');
    	diz.InserisciChiave(6,'x');
    	diz.InserisciChiave(8,'q');
    	char qq=diz.RicercaChiave(5);
    	cout<<qq<<endl;
    	char aa=diz.RicercaChiave(2);
    	cout<<aa<<endl;
    	diz.EliminaChiave(2);
    	char bb=diz.RicercaChiave(2);
    	cout<<bb<<endl;
        return 0;
    }
    codice:
    //dizionario.h
    //Implementazione di un dizionario tramite programmazione generica[template] 
    
    #ifndef DIZ_H
    #define DIZ_H
    #include <cmath>
    
    template<class T,class S>class Dizionario{
    
          public:
    		  Dizionario(int DimensioniTabella=100,double constA=0.445){
    			  if(DimensioniTabella=!0){
    				  Tabella=new Lista[DimensioniTabella];
    		  }
    		  }
              ~Dizionario(){delete []Tabella;}
    
       		     class Lista{
    			   public: 
    				    Lista(){PrimoElemento=0;}
    
    				               class Elemento {
    				                               public:
                                                         Elemento(){
                                                         ElementoSuccessivo=0;
    													 ElementoPrecedente=0;
                                                         chiave=0;     
    													 }
    						                       ~Elemento(){}
                                                   Elemento * ElementoPrecedente;
    											   Elemento * ElementoSuccessivo;
                                                   T chiave;
    											   S datoSatellite;
    							   };
                       
                       bool InserisciElemento(T,S);
    				   S Ricerca(T);
    				   S Cancella(T);
    				   int RestituisciNumElementi(){return NumElementiDellaLista;}
    				   bool SettaPrimoElemento(Elemento *q){PrimoElemento=q}
    				   Elemento *RestituisciPrimoElemento(){return PrimoElemento;}
    				   static int NumElementiDellaLista;
    				private:
    
    				   Elemento *PrimoElemento;
                       
                       
    			 };
                
    			 bool InserisciChiave(T,S);
                 S EliminaChiave(T);
    			 S RicercaChiave(T);
                 int FattoreDiCarico();
    			 int RestituisciDimensioniTab(){return DimensioniTabella;}
    			 
    			 protected:
                 
                 virtual unsigned long ConvertiChiave(T);
                 double constA;
    		     int DimensioniTabella;			 
                 int GeneraHashVal(T);
                 Lista *Tabella;
    };
    
    template <class T,class S>int Dizionario<T,S>::Lista::NumElementiDellaLista=0; 
    
    //funzioni classe Lista
    template <class T,class S>bool Dizionario<T,S>::Lista::InserisciElemento(T chiave,S dato){
    	Elemento *x=new Elemento();
        Elemento *y=0;
        y=RestituisciPrimoElemento();
    	x->chiave=chiave;
    	x->datoSatellite=dato;
    	if(y==0){SettaPrimoElemento(x);}
    	else{
    		 do{
    		y=y->ElementoSuccssivo;
    		}while(y->ElementoSuccssivo!=0);
            y->ElementoSuccssivo=x;
            x->ElementoPrecedente=y;
    		NumElementiDellaLista++;
    		return 1;
    	}
    }
    
    	
    template <class T,class S>S Dizionario<T,S>::Lista::Ricerca(T chiave){
    	Elemento *y=0;
        y=RestituisciPrimoElemento();
    	while((y!=0) && (y->chiave!=chiave)){
    		y=y->ElementoSuccessivo;}
    	return y->datoSatellite;
    }
    
    
    template <class T,class S>S Dizionario<T,S>::Lista::Cancella(T chiave){
    	Elemento *y=0;
    	y=Ricerca(chiave);
    	if((y!=0)&&(y->chiave==chiave)){
    		y->ElementoPrecedente->ElementoSuccessivo=y->ElementoSuccessivo;
    		if(y->ElementoSuccessivo!=0){
    			y->ElementoSuccessivo->ElementoPrecedente=y->ElementoPrecedente;
    		}
    		NumElementiDellaLista--;
            return y->datoSatellite;
    	}else{
    		return 0;
    	}
    }
    
    
    //Funzioni classe Dizionario
    template <class T,class S>int Dizionario<T,S>::FattoreDiCarico(){
    	double media;
    	int dim=RestituisciDimensioniTab();
    	for(int i=0;i<dim;i++){
    		media=media + Tabella[i].RestituisciNumElementi();
    	}
    	media=media/dim;
    	return media;
    }
    
    template <class T,class S>int Dizionario<T,S>::GeneraHashVal(T chiave){
    	int dim=RestituisciDimensioniTab();
        unsigned long val=ConvertiChiave(chiave);
    	double HashFunzDouble=(fmod((constA*val),1)*dim);
        double fraz=modf(HashFunzDouble,&HashFunzDouble);
    	int HashFunz=(int)HashFunzDouble;
    	return HashFunz;
    }
    
    
    template <class T,class S>bool Dizionario<T,S>::InserisciChiave(T chiave,S dato){
    	int hashVal=GeneraHashVal(chiave);
    	if(Tabella[hashVal].InserisciElemento(chiave,dato)){return 1;}
    	return 0;
    }
    
    template <class T,class S>S Dizionario<T,S>::RicercaChiave(T chiave){
        int hashVal=GeneraHashVal(chiave);
    	S dato=Tabella[hashVal].Ricerca(chiave);
    	if(dato!=0){return dato;}
    	return 0;
    }
    
    template <class T,class S>S Dizionario<T,S>::EliminaChiave(T chiave){
        int hashVal=GeneraHashVal(chiave);
    	S dato=Tabella[hashVal].Cancella(chiave);
    	if(dato!=0){return dato;}
    	return 0;
    }
    
    
    template <class T,class S>unsigned long Dizionario<T,S>::ConvertiChiave(T chiave){
    	unsigned long a=static_cast<unsigned long>(chiave);
    	return a;
    }
    
    
    
    #endif
    A me nn da errori di compilazione ma di link...e sono quelli che ho scritto prima..
    Ah se ti da errori di compilazione me li potresti postare?Altrimenti mi sa che nn ne vengo fuori..
    PS Grazie per la pazienza..

  2. #12
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Questi sono alcuni.
    codice:
    y=y->ElementoSuccssivo; // Elementosuccessivo; e ce ne sono altri sotto.
    codice:
    y=Ricerca(chiave); // error C2440: '=' : cannot convert from 'char' to 'Dizionario<T,S>::Lista::Elemento *'
    codice:
    bool SettaPrimoElemento(Elemento *q){PrimoElemento=q} // error C2143: syntax error : missing ';' before '}'
    Dopo correzione:
    codice:
    bool SettaPrimoElemento(Elemento *q){PrimoElemento=q;} // error C4716: 'Dizionario<int,char>::Lista::SettaPrimoElemento' : must return a value
    // warning C4715: 'Dizionario<int,char>::Lista::InserisciElemento' : not all control paths return a value
    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.

  3. #13
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    60
    gli errori che mi hai indicato effettivamente sono presenti...nn capisco perchè vc++ nn me li segnali... VVoVe: VVoVe: VVoVe: boh

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