Salta ai contenuti. | Salta alla navigazione

Strumenti personali

ERROR: 'modifica_nome': redefinition;different basic types;

Importante

nel programma allegato,nella riga contrassegnata,ho un errore che non riesco a capire..tralasciando o meno la correttezza del programma,è l'errore in se che non capisco,infatti salta fuori anche in qualche altro programma sempre in corrispondenza di procedure "void"..qualche volta,per farli eseguire,basta sostituire void con int,ma è un errore perchè sono procedure,non funzioni,non forniscono un valore di ritorno..volevo sapere da cos'è causato il problema e come fare per risolverlo,grazie!

void modifica(elemento e[],int *n,FILE *fp)
{
   ...
   modifica_nome(e,fp,i);
   ...
}

void modifica_nome(elemento e[],FILE *fp,int i) <<<<-ERROR: 'modifica_nome': redefinition;different basic types;
{							
	printf("\n\nInserire un nuovo nome: %s",e[i].nome);			
	fprintf(fp,"%s",e[i].nome);
}

Il problema in realta` non e` segnalato tanto in quell'errore, quanto in un warning che viene dato prima dell'errore stesso:

"warning: 'modifica_nome' undefined; assuming extern returning int"

La modifica_nome viene invocata all'interno della procedura modifica, che e` definita prima. Quindi quando il compilatore trova l'invocazione alla modifica_nome, non sa ancora come e` fatta e non ne conosce nemmeno l'interfaccia. Per questo, in linguaggio C, il compilatore si "inventa" una interfaccia e presuppone che la funzione sconosciuta restituisca un int. In seguito trova la definizione della procedura, la cui interfaccia e` diversa da quella che si era "inventata" e da` un errore, perche' una funzione non puo` avere due interfacce diverse. Soluzione: bisogna sempre definire le funzioni prima di usarle, oppure mettere almeno il prototipo (interfaccia).