之前的Arduino練習:Simon Says請你跟我這樣做,我發現一件事情,記錄如下。
一支很簡單的程式,居然無法通過編譯(在Arduino軟體開發環境下)。
typedef enum{
Foo_E0,
Foo_E1,
Foo_E2,
} FooEnum;
void bar(FooEnum fe){
}
void setup(){
}
void loop(){
}
錯誤訊息:
Test:-1: error: variable or field 'bar' declared void
Test:-1: error: 'FooEnum' was not declared in this scope
什麼跟什麼啊?看不懂。
函式若以enum為參數,或是回傳型別為enum,都會出現此問題。
不過,如果我自己在cygwin命令列模式下進行編譯,則不會有問題。
上網搜尋後,在Arduino Playground發現這篇,How can I use enums as function returntypes or as parameters to functions?。
大意是說,Arduino軟體開發環境在把程式檔交給編譯器之前,會在先進行一些"處理",其中一項是找出函式並加以宣告放到最前面,於是會造成上述的問題,總之,解決方法就是把enum的定義,搬到另一支.h檔,然後在.ino檔include那支.h檔,這樣就可解決了。
可以參考這一份文件,解說Arduino軟體開發環境的建置過程。
No comments:
Post a Comment