Oppure

Loading
08/01/15 14:29
Steno94
Salve a tutti, dopo diverse ricerche non ho trovato una soluzione adeguata al mio problema quindi ho deciso di chiedere direttamente a voi.
Vorrei semplicemente passare come parametro di una funzione un "typedef struct"...qualcuno può spiegarmi come? Grazie.
Di seguito il codice e gli errori restituiti dal compilatore. Grazie ancora!

typedef struct cantiere {
        char cognomeIngegnere[ 30 ];
        char nomeIngegnere[ 30 ];
} t_cantiere;

void inserisciDati(t_cantiere c) {
	printf("Congome Ingegnere: ");
	scanf("%s", c.cognomeIngegnere);
}
 
int main(void) 
{
	t_cantiere c;
	inseresciDati(c);
	//printf("%s", c.cognomeIngegnere);
	return 0;
}


Compilazione:
gcc -Wall -c "cantiere.c" (nel direttorio: /home/stefano/Scrivania)
cantiere.c: In function ‘main’:
cantiere.c:48:2: warning: implicit declaration of function ‘inseresciDati’ [-Wimplicit-function-declaration]
inseresciDati(c);
^
Compilazione terminata correttamente.



Generazione:
gcc -Wall -o "cantiere" "cantiere.c" (nel direttorio: /home/stefano/Scrivania)
cantiere.c: In function ‘main’:
cantiere.c:48:2: warning: implicit declaration of function ‘inseresciDati’ [-Wimplicit-function-declaration]
inseresciDati(c);
^
/tmp/ccGHQELf.o: nella funzione "main":
cantiere.c:(.text+0x61): riferimento non definito a "inseresciDati"
collect2: error: ld returned 1 exit status
Compilazione fallita.
aaa
08/01/15 14:45
TheDarkJuster
Un metodo si chiama inserisci e l'altro inseresci
aaa
08/01/15 15:01
Steno94
Postato originariamente da TheDarkJuster:

Un metodo si chiama inserisci e l'altro inseresci


Ho perso ore per una cosa così banale!! Grazie mille!
aaa
08/01/15 16:23
C'è anche un altro aspetto: il parametro "c" dovrebbe essere passato per indirizzo, se no non modifichi la variabile nel main() ma solo una sua COPIA in inserisciDati() (quella nel main() resta intatta).

typedef struct cantiere {
    char cognomeIngegnere[ 30 ];
    char nomeIngegnere[ 30 ];
} t_cantiere;

void inserisciDati(t_cantiere *c) {
    printf("Congome Ingegnere: ");
    scanf("%s", c->cognomeIngegnere);
}

int main(void)
{
    t_cantiere c;
    inserisciDati(&c);
    printf("%s", c.cognomeIngegnere);
    return 0;
}