2013-01-07 21 views
5

non ha trovato nulla nelle domande correlate. Molto probabilmente è super niubbo, ma chiederò comunque/Ho il seguente nel mio file h:C: typedef union

typedef union _API_Packet_0x90{ 
    uint8_t packet[26]; 
    struct _pack_struct { 
     uint8_t start; 
     uint8_t length[2]; 
     uint8_t addr64[8]; 
     uint8_t addr16[2]; 
     uint8_t options; 
     uint8_t rfData[4]; 
     uint8_t chksum; 
    }; 
} API_Packet_0x90; 

API_Packet_0x90 ap90; 

Questo è il codice per un microcontrollore, sto usando XC8 toolchain (ex Hi Tech C). Il compilatore dice:

xbee_api.h:19: warning: missing basic type; int assumed
xbee_api.h:19: error: ";" expected
xbee_api.h:19: warning: missing basic type; int assumed
xbee_api.h:21: warning: missing basic type; int assumed

, e questo va avanti (troppi errori)

ho pensato che è uint8_t, così ho aggiunto #include <ctypes.h>. No. Ho pensato che è sui nomi, così ho provato tutti i tipi di opere come

typedef union { 
    uint8_t packet[26]; 
    struct _pack_struct { 

    }; 
} API_Packet_0x90; 

o

typedef union { 
    uint8_t packet[]; 
    struct _pack_struct { 

    }; 
} API_Packet_0x90; 

o di altri. Niente aiuta Sono bloccato perché ritengo di seguire correttamente la sintassi. Qualsiasi aiuto?

+4

Come fai a sapere l'inclusione che hai aggiunto definito uint8_t? Forse prova ad aggiungere 'typedef unsigned char uint8_t;' prima di quella definizione ... o aiuterà o si lamenterà che la stai ridefinendo. – Matthieu

+0

Probabilmente è necessario '#include ' per 'uint8_t'. –

+0

'xbee_api.h: 19:' puoi dare anche i numeri di riga del tuo codice? almeno il numero della prima riga? In modo che possiamo sapere, quale linea sta dando problemi. – anishsane

risposta

6

uint8_t si trova in stdint.h, non in ctype.h (né ctypes.h, non esiste un'intestazione simile). È necessario utilizzare un compilatore che segua una versione più recente dello standard C per trovare questa intestazione (standard C99 o C11).

+0

Ho pensato che fosse un errore super-stupido. Era così. Grazie. – dccharacter

+0

Oppure aggiungere una definizione personalizzata per il tipo di dati sconosciuto. Non è necessario utilizzare un compilatore che segua una versione più recente dello standard C. Oppure cerca e sostituisci il tipo di dati con un altro che il compilatore conosce. Hai scelte. –

+0

@dwelch Ovviamente puoi definire tu stesso il tipo, non ho detto nulla per contraddirlo. Ma per trovare l'intestazione stdint.h è necessario utilizzare un compilatore più recente, come scritto nel mio post. – Lundin