2013-01-07 42 views
5

在相關問題中未找到任何內容。最可能的是它的超級小白,但是我會問反正/我有我的.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; 

這是一個微控制器的代碼,我使用的工具鏈xc8(原喜TECH C )。編譯器說:

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

,這推移(太多錯誤)

我認爲這是uint8_t,所以我加了#include <ctypes.h>。不。我認爲這是有關的名字,所以我嘗試各種戲劇例如作爲

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

    }; 
} API_Packet_0x90; 

typedef union { 
    uint8_t packet[]; 
    struct _pack_struct { 

    }; 
} API_Packet_0x90; 

或他人。沒什麼幫助。我被卡住了,因爲我相信我的語法正確。任何幫助?

+4

你如何知道你添加了定義的uint8_t?也許嘗試添加'typedef unsigned char uint8_t;'在這個定義之前......要麼它會有所幫助,要麼會抱怨你正在重新定義它。 – Matthieu

+0

您可能需要'#include '作爲'uint8_t'。 –

+0

'xbee_api.h:19:'你還可以給你的代碼行號?至少第一行的數量是多少?所以我們可以知道,哪條線給出了問題。 – anishsane

回答

6

uint8_t位於stdint.h,而不是ctype.h(也不ctypes.h,不存在這樣的頭)。您必須使用符合C標準的更新版本的編譯器才能找到該標頭(C99或C11標準)。

+0

我認爲這是一個超級愚蠢的錯誤。就是這樣。謝謝。 – dccharacter

+0

或爲未知數據類型添加自己的定義。沒有要求使用遵循更新版本的C標準的編譯器。或者用編譯器知道的另一種搜索和替換數據類型。你有選擇。 –

+0

@dwelch當然你可以自己定義類型,我沒有說過任何與之相矛盾的東西。但是爲了找到stdint.h頭文件,你必須使用一個更新的編譯器,就像寫在我的文章中一樣。 – Lundin