2013-01-07 19 views
5

nie znalazł niczego w powiązanych pytaniach. Najprawdopodobniej jest to bardzo noobem, ale poproszę anyway/Mam następujących w moim pliku .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; 

Jest to kod dla mikrokontrolera, używam toolchain xc8 (dawniej Hi Tech C). Kompilator mówi:

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

, a to idzie na (zbyt wielu błędów)

Myślałem, że to uint8_t, więc dodałem #include <ctypes.h>. Nie. Myślałem, że chodzi o nazwy, więc próbowałem wszystkie rodzaje sztuk takich jak

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

    }; 
} API_Packet_0x90; 

lub

typedef union { 
    uint8_t packet[]; 
    struct _pack_struct { 

    }; 
} API_Packet_0x90; 

lub innych. Nic nie pomaga. Utknąłem, ponieważ uważam, że poprawnie stosuję składnię. Jakaś pomoc?

+4

Skąd wiesz, że dodałeś zdefiniowany uint8_t? Może spróbuj dodać 'typedef unsigned char uint8_t;' przed tą definicją ... albo pomoże, albo będzie narzekać, że zmieniacie ją. – Matthieu

+0

Prawdopodobnie potrzebujesz '#include ' dla 'uint8_t'. –

+0

'xbee_api.h: 19:' czy możesz również podać numery linii twojego kodu? co najmniej numer pierwszego wiersza? Żebyśmy wiedzieli, która linia daje problem. – anishsane

Odpowiedz

6

uint8_t znajduje się w stdint.h, a nie w ctype.h (ani ctypes.h, nie istnieje taki nagłówek). Musisz użyć kompilatora następującego po nowszej wersji standardu C dla tego nagłówka (standardy C99 lub C11).

+0

Myślałem, że to był głupi błąd. To było to. Dziękuję Ci. – dccharacter

+0

Lub dodaj własny własny dla nieznanego typu danych. Nie ma wymogu używania kompilatora zgodnego z nowszą wersją standardu C. Lub wyszukaj i zastąp typ danych innym, o którym wie kompilator. Masz wybór. –

+0

@dwelch Oczywiście możesz sam zdefiniować typ, nie powiedziałem nic, co by to zaprzeczyło. Ale aby znaleźć nagłówek stdint.h musisz użyć nowszego kompilatora, jak napisałem w moim poście. – Lundin