2013-01-07 47 views
5

संबंधित प्रश्नों में कुछ भी नहीं मिला। अधिकांश शायद यह सुपर noob है, लेकिन मैं वैसे भी पूछेंगे/मैं अपने ज फ़ाइल में निम्न है:सी: टाइपिफ़ यूनियन

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 toolchain (पूर्व हाय टेक सी उपयोग कर रहा हूँ)। संकलक का कहना है:

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

आपको 'uint8_t' के लिए शायद '#' शामिल करना होगा। –

+0

'xbee_api.h: 19: 'क्या आप अपने कोड की रेखा संख्या भी दे सकते हैं? कम से कम पहली पंक्ति की संख्या? ताकि हम जान सकें कि कौन सी लाइन समस्या दे रही है। – anishsane

उत्तर

6

uint8_tstdint.h में स्थित है, ctype.h में नहीं (न ही ctypes.h, ऐसा कोई हेडर मौजूद नहीं है)। आपको एक ऐसे कंपाइलर का उपयोग करना चाहिए जो इस शीर्षलेख के लिए सी मानक के एक नए संस्करण का पालन करता है (सी 99 या सी 11 मानकों)।

+0

मैंने सोचा कि यह एक सुपर बेवकूफ गलती थी। वह यह था। धन्यवाद। – dccharacter

+0

या अज्ञात डेटा प्रकार के लिए स्वयं की परिभाषा जोड़ें। सी मानक के एक नए संस्करण का पालन करने वाले कंपाइलर का उपयोग करने की कोई आवश्यकता नहीं है। या किसी अन्य संकलक के साथ डेटा प्रकार को खोज और प्रतिस्थापित करें। आपके पास विकल्प हैं –

+0

@dwelch बेशक आप स्वयं को इस प्रकार को परिभाषित कर सकते हैं, मैंने इसके विपरीत कुछ भी नहीं कहा है। लेकिन हेडर stdint.h खोजने के लिए आपको मेरे पोस्ट में लिखे गए एक नए कंपाइलर का उपयोग करना होगा। – Lundin