PDA

Visualizza versione completa : [C] Errori di compilazione


Alhazred
22-08-2007, 14.53.55
Situazione 1:
...
BOOL LeggiDaFile(char *, request_msg); //dichiarazione prototipo
...
LeggiDaFile("input.txt", messaggio); // chiamata alla funzione
...
BOOL LeggiDaFile(char *input, request_msg messaggio) { //intestazione funzione
...
error C2081: 'request_msg' : name in formal parameter list illegal //riferito al prototipo
error C2115: 'function' : incompatible types // riferito alla chiamata alla funzione
warning C4024: 'LeggiDaFile' : different types for formal and actual parameter 2 // riferito alla chiamata alla funzione
warning C4028: formal parameter 2 different from declaration //riferito all'intestazione della funzione


Situazione 2:
...
BOOL LeggiDaFile(request_msg, char *); //dichiarazione prototipo
...
LeggiDaFile(messaggio, "input.txt") // chiamata alla funzione
...
BOOL LeggiDaFile(request_msg messaggio, char *input) { //intestazione funzione
...
error C2122: 'char *' : prototype parameter in name list illegal //riferito al prototipo

Le due situazioni differiscono solo nell'ordine in cui sono scritti i parametri, request_msg è un tipo di dato strutturato che ho definito io.
Perché solo cambiando l'ordine dei parametri ho errori in compilazione diversi? Come devo interpretare questi errori? Perché se passo solo char * o alternativamente request_msg viene compilato (anche se il prog non funziona perché ho bisogno di entrambi i dati per quella funzione), mentre se li passo entrambi no?

LoryOne
22-08-2007, 16.40.28
Perchè non stai attento.
Occhio quando passi strutture alle funzioni.

typedef struct MSKINPUT{
short int X;
short int Y;
short int Color;
short int Flags;
char ToExclude[MSKINPUT_MAXEXCLUDE];
const char *InputMask;
const char *FilledMask;
char *ReturnMask;
short int CharFunction;
}_MSKINPUT;

void MSKINPUT_InputMASK (_MSKINPUT * );

struct MSKINPUT input[2];
MSKINPUT_InputMASK(&input[c]);

Alhazred
22-08-2007, 17.31.50
Non ho capito cosa vuoi dirmi.
Il tipo strutturato che ho io è fatto così:

typedef struct {
char mailslot_name[MAX_SEND_REC],
da[MAX_SEND_REC],
a[MAX_SEND_REC],
oggetto[MAX_TEXT],
testo[MAX_TEXT];
int service_code;
} message;

typedef struct {
message req;
} request_msg;


Se serve, il codice completo è questo:
http://lacasa.altervista.org/software/Server.c
è necessario copiare il link ed incollarlo nella barra degli indirizzi del browser.

LoryOne
23-08-2007, 11.42.42
Non ho capito cosa vuoi dirmi.
Il tipo strutturato che ho io è fatto così:

typedef struct {
char mailslot_name[MAX_SEND_REC],
da[MAX_SEND_REC],
a[MAX_SEND_REC],
oggetto[MAX_TEXT],
testo[MAX_TEXT];
int service_code;
} message;

typedef struct {
message req;
} request_msg;


Se serve, il codice completo è questo:
http://lacasa.altervista.org/software/Server.c
è necessario copiare il link ed incollarlo nella barra degli indirizzi del browser.

Well, puntate sul file e selezionate "Salva oggetto con nome" per il download del file (Impostazioni Internet permettendo).

Dunque:
Tutto Ok, mastro.
Devi fare attenzione ai tipi di struttura definiti dall' utente (Typedef).
Sposta i prototipi dopo la dischiarazione del tipo.
Ricompila. no problem (Y)

Nno ho visionato il codice, il compilatore compila senza problemi, quindi vai alla grande Ahl !!!

Alhazred
23-08-2007, 17.12.51
Oh cavolo.. e chi ci aveva pensato a spostare i prototipi?!?! :wall:
Grazie. :)

LoryOne
23-08-2007, 19.16.34
Figurati, solo esperienza.
Il primo post ti forniva già la soluzione :)