Expected declaration specifiers or '...' before'

di il
4 risposte

Expected declaration specifiers or '...' before'

Ciao ragazzi, ho il seguente errore nel file

 In file included from util.c
 [Error] expected declaration specifiers or '...' before 'utente'
Makefile.win recipe for target 'util.o' failed


in breve nella funzione void modifica_Utente(utente *utente, utente **testa) chiamo la funzione void scrivi_Utenti(utente **testa). Ma non riesco a compilare causa errore sopra mostrato. Ho controllato più volte le parentesi graffe e sembra essere tutto corretto da quel punto di vista. Cosa può essre?

#include <time.h>
#include <ctype.h>
#include <windows.h>

#define BUFFER_SIZE 1024
#define Char_size 20

//Definizione struct UTENTE	
struct utente {
	int id;
	int permessi;
    char nome[Char_size];
    char cognome[Char_size];
    char nick[Char_size];
    char password[Char_size];
    struct utente *next_Utente; //puntatore al prossimo nodo
};
typedef struct utente utente;

utente *lettura_Utenti(FILE *fp);

void registrazione_utente(utente **testa);

utente *accesso(utente **testa, char *text);

void stampa_Utente(utente *utente);

void modifica_Utente(utente *utente, utente **testa); //NUOVA FUNZIONE

void scrivi_Utenti(utente **testa); // NUOVA FUNZIONE

Premetto che il problema è nato solo dopo l'inserimento di queste due nuove funzioni.

4 Risposte

  • Re: Expected declaration specifiers or '...' before'

    Il problema è nella seguente dichiarazione:

    void modifica_Utente(utente *utente, utente **testa); //NUOVA FUNZIONE

    Risposta breve: evita di chiamare variabili con lo stesso identificatore utilizzato per definire un sinonimo di un certo tipo introdotto con un typedef.

    Risposta meno breve: il fatto di chiamare utente il primo argomento della funzione va ad oscurare la definizione fatta in precedenza col typedef, in pratica da questo momento in poi, nell'ambito della funzione, la parola utente non rappresenta più un sinonimo del tipo struct utente, ma rappresenta il nome della variabile appena dichiarata.
    Per fare un esempio, sarebbe come scrivere qualcosa del genere:

    void fun(int a, a b);
  • Re: Expected declaration specifiers or '...' before'

    Banalità, giusto! Grazie mille! [RISOLTO]

  • Re: Expected declaration specifiers or '...' before'

    Infatti, anche questo se ci pensi un minuto risolvi da solo. Sembra che scrivere sul forum sia più comodo..

  • Re: Expected declaration specifiers or '...' before'

    Ma, su questa ultima affermazione non sono completamente d'accordo.

    Premesso che a me non verrebbe mai in mente di usare lo stesso token usato per dichiarare un typedef, al più metterei come variabili utente1, utente2, ecc. Però pur essendo segnalato dal compilatore, è un errore più difficile da capire per un principiante o per chi ha poca esperienza di programmazione.

    Detto questo, concordo sul fatto che ultimamente in generale vengono poste delle questioni alquanto banali, che potrebbbero essere auto-risolte, ma si vede che costa “tempo e fatica” leggersi un buon libro… ah, i giovani d'oggi.

Devi accedere o registrarti per scrivere nel forum
4 risposte