2013-08-10 13 views
7

Poniższy szkic nie kompiluje się w środowisku Arduino.Dlaczego nie mogę przekazać typedef lub wyliczenia w Arduino?

Zważywszy, że typedefs can be used within Arduino software jest Automatyczna generacja Prototype bazowy mechanizm, który powoduje awarię? Jeśli tak, to co to jest i dlaczego Arduino nie zapewnia lekkiego opakowania wokół C++?

#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() {} 

Z korzyścią dla wyszukiwarek, błędy zgłaszane są:

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

Odpowiedz

8

Proszę odnieść się do http://arduino.cc/en/Hacking/BuildProcess konkretny cytat:

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

Ta strona robi dobrą robotę wyjaśnienie, w jaki sposób język Arduino różni się od języka C/C++, w jaki sposób działa/wstępnie przetwarza pliki.

0

Próbują tworzyć prototypy dla każdej znalezionej funkcji. Niestety, jeśli zdefiniujesz typedef w pliku przed funkcją i użyjesz go w definicji funkcji, miejsce, w którym umieścił prototyp funkcji, nie zobaczy tego, a to spowoduje błąd składni.

Jeśli używasz składni "struct *" zamiast w definicjach funkcji, korzystasz z funkcji "typu nieprzezroczystego" C, w której możesz użyć definicji struktury bez uprzedniego jej zadeklarowania. Tak więc, buduj typedef, używaj go, ale używaj definicji struct w dowolnych funkcjach, które używają argumentów typedef.

typedef struct mytype_ { 
    int f1; 
} mytype_t; 

void myfunc(struct mytype_ * xxx) { 
    xxx->f1 = 1; 
} 
Powiązane problemy