2013-08-10 9 views
7

निम्नलिखित स्केच Arduino पर्यावरण में संकलन करने में विफल रहता है।मैं Arduino में typedef या enum क्यों नहीं पारित कर सकता हूं?

यह देखते हुए कि typedefs can be used within Arduino software, स्वचालित प्रोटोटाइप जनरेशन अंतर्निहित तंत्र जो विफलता का कारण बनता है? यदि हां, तो यह क्या है और क्यों Arduino सी ++ के आसपास हल्के रैपर प्रदान नहीं कर रहा है?

#define PRODUCE_WACKY_COMPILETIME_ERROR 
typedef int MyMeaningfulType; 

#ifndef PRODUCE_WACKY_COMPILETIME_ERROR 
void myFunc(MyMeaningfulType myParam); 
#endif 

void myFunc(MyMeaningfulType myParam) 
{ 
    myFunc(10); 
} 

void setup() {} 
void loop() {} 

खोज इंजन के लाभ के लिए, त्रुटियों की सूचना दी हैं:

error: variable or field 'myFunc' declared void 
error: 'MyMeaningfulType' was not declared in this scope 

उत्तर

8

कृपया http://arduino.cc/en/Hacking/BuildProcess का उल्लेख विशिष्ट उद्धरण है:

This means that if you want to use a custom type as a function argument, you should declare it within a separate header file. 

इस पृष्ठ का एक अच्छा काम करता है यह बताते हुए कि कैसे Arduino भाषा सी/सी ++ से भिन्न है, यह कैसे काम करता है/फ़ाइलों को पूर्व-प्रोसेस करता है।

0

वे जो भी कार्य ढूंढते हैं उसके लिए प्रोटोटाइप बनाने का प्रयास कर रहे हैं। दुर्भाग्यवश, यदि आप फ़ंक्शन से पहले फ़ाइल में टाइपिफ़ को परिभाषित करते हैं, और फ़ंक्शन परिभाषा में इसका उपयोग करते हैं, तो वे फ़ंक्शन प्रोटोटाइप डालने वाले स्थान को नहीं देखते हैं, और इससे सिंटैक्स त्रुटि उत्पन्न होती है।

यदि आप उन फ़ंक्शन परिभाषाओं के बजाय 'संरचना *' वाक्यविन्यास का उपयोग करते हैं, तो आपको सी की 'अपारदर्शी प्रकार' सुविधा से लाभ होता है, जिसमें आप पहले से घोषित किए बिना संरचना परिभाषा का उपयोग कर सकते हैं। तो, टाइपपीफ बनाएं, इसका इस्तेमाल करें, लेकिन किसी भी फ़ंक्शन में स्ट्रक्चर परिभाषा का उपयोग करें जो तर्कों में टाइपपीफ का उपयोग करता है।

typedef struct mytype_ { 
    int f1; 
} mytype_t; 

void myfunc(struct mytype_ * xxx) { 
    xxx->f1 = 1; 
} 
संबंधित मुद्दे