Non capisco il problema mi dice che non ho inizializzato il void?

di il
32 risposte

Non capisco il problema mi dice che non ho inizializzato il void?

Lo scopo del mio programma è caricare da file dei nomi di professori e dei numeri vedere se è ordinato se non lo è ordinarlo ed eliminare i nomi uguali

Questo è il mio txt:

rossi
3321
di lorenzo
3345
ferrante
2134
di lorenzo
3345

Questo è il mio main :
#include "alfabetico.h"

int main(){
	
	Stringa nome_file;
	fstream file;
	Docenti dati;	
	int dim;
	
	
	carica_file(nome_file, file, dati, &dim);
	stampa_file(dati, dim);
	controllo_ordine(dati, dim);

}
Queste sono le mie funzioni :
 #include "alfabetico.h"

void carica_file(Stringa nome, fstream &f, Docenti professore, int *d){
	
	int i=0;
	
	cout<<"\n Inserisci nome del file che vuoi caricare :";
	cin.getline(nome,STR_MAX-1, '\n');
	f.open(nome, ios::in);
	if(!f){
		
		cout<<"\n Errore durante l'inserimento del nome del file...";
		exit(1);
		
	}else{
		
		while(!f.eof()){
			
			f>>professore[i].Cognome;
			f>>professore[i].Numero;
			i++;
		}
		i--;
	}

	*d=i;	
	f.close();
}

void stampa_file( Docenti insegnanti, int dimensione){
	
	cout<<"\n Stampo il file :\n";
	for(int i=0; i<dimensione; i++){
		
		cout<<insegnanti[i].Cognome<<endl;
		cout<<insegnanti[i].Numero<<endl;
		
	}
	
}

void controllo_ordine( Docenti professori, int size){
	
	Professore scambio;
	int risult, cont;

	
	for(int i=0; i<size; i++){
		
		for(int j=i+1; j<size; j++){

			risult=strcmp(professori[i].Cognome, professori[j].Cognome);
			
				if(risult>0){
				
				scambio=professori[i];
				professori[i]=professori[j];
				professori[j]=scambio;
				
					}else{
		
				cont++;
				risult=cont;
		
			}
		}
			
	}
	
	if(risult==size){
		
		cout<<"\n L'elenco è già ordinato alfabeticamente \n";
		
	}
	
	stampa_file(professori, size);
	cout<<"\n Controllo se ci sono elementi uguali: \n";
	elimina_uguali(professori, size);
	stampa_file(professori, size);
	
}

void elimina_uguali(Docenti prof, int s){
	
Pnodo L1;
int ris;
	
for(int i=0; i<s; i++){
		
	for(int j=i+1; i<s; j++){
	
		ris=strcmp(prof[i].Cognome, prof[j].Cognome);
		
			if(ris==0){
			
				cancella_nodo(prof[j].Cognome,Pnodo &L1);
							
			}
					
		}
				
	}	
			
}
		
void cancella_nodo(Stringa cognome, Pnodo &n1){

Pnodo Temp;
		
	if(n1!=NULL){

		if(n1->Cognome==prof[j].Cognome){
								
			Temp=n1;
			n1=n1->next;
			delete Temp;
			}else {
			
				cancella_nodo(Stringa cognome, Pnodo &n);
			
			}
		}
} 
Questa è la mia libreria :
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>

using namespace std;

#define STR_MAX 100
#define VET_MAX 100

typedef char Stringa [STR_MAX];

typedef struct Lista{
	
	Stringa Cognome;
	int Numero;
	Lista *next;
	
}Professore;

typedef Lista* Pnodo;
typedef Professore Docenti [VET_MAX];

void carica_file(Stringa, fstream &f, Docenti , int *);
void stampa_file( Docenti, int);
void controllo_ordine(Docenti, int);
void confronto(Stringa , Stringa , int *);
void scambio(Docenti, int);
void elimina_uguali(Docenti, int);
void cancella_nodo(Stringa , Pnodo &)

32 Risposte

  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    Nell'ultima riga del file alfabetico.h manca il ;
  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    oregon ha scritto:


    Nell'ultima riga del file alfabetico.h manca il ;
    Grazie ora però a quanto pare non era l'unico errore chissà che ho combinato in queste funzioni mi puoi dare un mano?Se puoi?

    Ho cambiato nel mio ccp delle funzioni così le funzioni elimina uguali e cancella nodo
    void elimina_uguali(Docenti prof, int s){
    	
    Pnodo L1;
    int ris;
    	
    for(int i=0; i<s; i++){
    		
    	for(int j=i+1; i<s; j++){
    	
    		ris=strcmp(prof[i].Cognome, prof[j].Cognome);
    		
    			if(ris==0){
    			
    				cancella_nodo(prof[j].Cognome,&j, Pnodo L1);
    							
    			}
    					
    		}
    				
    	}	
    			
    }
    		
    void cancella_nodo(Docenti insegnante,int *j, Pnodo &n1){
    
    
    Pnodo Temp;
    		
    	if(n1!=NULL){
    
    		if(n1->Cognome==insegnante[j].Cognome){
    								
    			Temp=n1;
    			n1=n1->next;
    			delete Temp;
    			}else {
    			
    				cancella_nodo(Docenti insegnante,int &j, Pnodo &n1);
    			
    			}
    		}
    }

    E così è la mia libreria
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    #include <cstring>
    
    using namespace std;
    
    #define STR_MAX 100
    #define VET_MAX 100
    
    typedef char Stringa [STR_MAX];
    
    typedef struct Lista{
    	
    	Stringa Cognome;
    	int Numero;
    	Lista *next;
    	
    }Professore;
    
    typedef Lista* Pnodo;
    typedef Professore Docenti [VET_MAX];
    
    void carica_file(Stringa, fstream &f, Docenti , int *);
    void stampa_file( Docenti, int);
    void controllo_ordine(Docenti, int);
    void confronto(Stringa , Stringa , int *);
    void scambio(Docenti, int);
    void elimina_uguali(Docenti, int);
    void cancella_nodo(Docenti ,int *, Pnodo &);

  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    Comincia dal primo errore , identifica la linea dal numero, leggi l'errore ...
  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    oregon ha scritto:


    Comincia dal primo errore , identifica la linea dal numero, leggi l'errore ...
    Risolto alcuni ma qua non capisco soprattutto quando mi chiamo la funzione cancella.

    funzioni
    void elimina_uguali(Docenti prof, int s){
    	
    Pnodo L1;
    int ris;
    	
    for(int i=0; i<s; i++){
    		
    	for(int j=i+1; i<s; j++){
    	
    		ris=strcmp(prof[i].Cognome, prof[j].Cognome);
    		
    			if(ris==0){
    			
    				cancella_nodo(prof[j].Cognome,j, L1);
    							
    			}
    					
    		}
    				
    	}	
    			
    }
    		
    void cancella_nodo(Docenti insegnante,int j, Pnodo &n1){
    
    
    Pnodo Temp;
    		
    	if(n1!=NULL){
    
    		if(n1->Cognome==insegnante[j].Cognome){
    								
    			Temp=n1;
    			n1=n1->next;
    			delete Temp;
    			}else {
    			
    				cancella_nodo(insegnante, j, n1);
    			
    			}
    		}
    }
    Libreria
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    #include <cstring>
    
    using namespace std;
    
    #define STR_MAX 100
    #define VET_MAX 100
    
    typedef char Stringa [STR_MAX];
    
    typedef struct Lista{
    	
    	Stringa Cognome;
    	int Numero;
    	Lista *next;
    	
    }Professore;
    
    typedef Lista* Pnodo;
    typedef Professore Docenti [VET_MAX];
    
    void carica_file(Stringa, fstream &f, Docenti , int *);
    void stampa_file( Docenti, int);
    void controllo_ordine(Docenti, int);
    void confronto(Stringa , Stringa , int *);
    void scambio(Docenti, int);
    void elimina_uguali(Docenti, int);
    void cancella_nodo(Docenti ,int , Pnodo &);

  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    Cosa non capisci? Ti dice che non può convertire un char* in un Professore* quando chiami la funzione cancella_nodo nel file alfabeto.cpp come primo parametro. Quindi cosa fai?
    Vai a vedere la riga corrispondente e scopri che chiami cancella_nodo() passandole come primo parametro "prof[j].Cognome" che guarda un po' è un campo stringa. Quindi cosa fai?
    Ora sta a te...
  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    jfet ha scritto:


    Cosa non capisci? Ti dice che non può convertire un char* in un Professore* quando chiami la funzione cancella_nodo nel file alfabeto.cpp come primo parametro. Quindi cosa fai?
    Vai a vedere la riga corrispondente e scopri che chiami cancella_nodo() passandole come primo parametro "prof[j].Cognome" che guarda un po' è un campo stringa. Quindi cosa fai?
    Ora sta a te...
    Scusa l'ignoranza sono agli inizi. Ma io quando gli lo avrei detto che doveva convertirmi, la stringa di un array di struct professore.Cognome, in una variabile char? E questo che non capisco.
    Comunque grazie per l'aiuto che mi state dando, fate bene a darmi questi indizi, e non darmi la pappa pronta così cerco di capire io il problema e risolvermelo.
  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    Scusami se sono stato poco chiaro nella risposta di prima e non aver specificato questa mia incomprensione del errore
  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    Di che tipo è Cognome? È quello che stai passando. É quello che accettava la funzione?
  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    oregon ha scritto:


    Di che tipo è Cognome? È quello che stai passando. É quello che accettava la funzione?
    Cognome dovrebbe essere una stringa di char professore.Cognome contenuta dentro all'array di struct giusto? Ma io invece gli sto passando una variabile di tipo Docenti che è un typedef di struct, quindi dovrei passargli una variabile di tipo Stringa? Ma quindi poi come potrò eliminare il nodo all'interno della pila?
  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    Sir.Croccodile ha scritto:


    Scusa l'ignoranza sono agli inizi ma io quando gli lo avrei detto che doveva convertirmi la stringa di un array di struct professore.Cognome in una variabile char? E questo che non capisco. Comunque grazie per l'aiuto che mi state dando fate bene a darmi questi indizi e non la pappa pronta così cerco di capire io il problema.


    Per favore, utilizza la dovuta punteggiatura e un italiano sufficientemente corretto. Grazie.
  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    Io con le liste e l'utilizzo dei nodi sto un pò litigato mi consigliate qualche testo web per capirci un pò in più che dal mio libro non ci capisco niente?
  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    Sir.Croccodile ha scritto:


    oregon ha scritto:


    Di che tipo è Cognome? È quello che stai passando. É quello che accettava la funzione?
    Cognome dovrebbe essere una stringa di char professore.Cognome contenuta dentro all'array di struct giusto? Ma io invece gli sto passando una variabile di tipo Docenti che è un typedef di struct, quindi dovrei passargli una variabile di tipo Stringa? Ma quindi poi come potrò eliminare il nodo all'interno della pila?


    Confusione. Questo succede quando inizi a scrivere C e salti i primi 5 capitoli del libro perché "tanto ho capito e lo so fare".
  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    jfet ha scritto:


    Sir.Croccodile ha scritto:


    Scusa l'ignoranza sono agli inizi ma io quando gli lo avrei detto che doveva convertirmi la stringa di un array di struct professore.Cognome in una variabile char? E questo che non capisco. Comunque grazie per l'aiuto che mi state dando fate bene a darmi questi indizi e non la pappa pronta così cerco di capire io il problema.


    Per favore, utilizza la dovuta punteggiatura e un italiano sufficientemente corretto. Grazie.

    Corretto scusa
  • Re: Non capisco il problema mi dice che non ho inizializzato il void?

    Sir.Croccodile ha scritto:


    Io con le liste e l'utilizzo dei nodi sto un pò litigato mi consigliate qualche testo web per capirci un pò in più che dal mio libro non ci capisco niente?
    Cosa intendi per testo web? Tutorials online? Cmq una buona lista di libri C puoi trovarla qua https://web.archive.org/web/20180103230717/http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list
Devi accedere o registrarti per scrivere nel forum
32 risposte