2013-10-28 80 views
6

在編寫一些Arduino的C文件,我得到一個錯誤 「未定義的參考`readArms()'」Arduino的C:未定義的引用`readArms() '

的代碼可以在paste bin找到。

但基本上什麼情況是:

在INO文件我用:

這是在 「armfunctions.h」 和 「armfunctions.c」

的.H聲明文件包含

void readArms(void); 

而.c文件:

void readArms(void){ 
    float motor1 = 0.0; 
    int motor = 0; 
    motor = analogRead(READMOTOR1); 
    motor1 = (float)motor; 
    motor1 = (motor1 - 87.0) * (400.0/(1007.0-87.0)); 
    delay(1000); 
} 
+3

你是否已將''armfunctions.c''傳遞給編譯器? – Sadique

+0

是的,所有這些文件都放在同一個文件夾中,並且當我打開.INO文件時,所有這些文件都出現在arduino SDK中 – DutchGabber

+1

將armfunctions.c更改爲armfunctions.cpp解決了問題 – DutchGabber

回答

24

我今天一直在研究這幾個小時,製造和測試各種草圖和發現(因爲你已經發現)它們變爲.cpp是一個解決辦法,但如果你想專門創建交流文件,你必須將原型包裝在頭文件中才能編譯。有一個關於它的一些好的帖子,但問題的關鍵所在,在你.h文件提出:

#ifdef __cplusplus 
extern "C" { 
#endif 

void readArms(void); 

#ifdef __cplusplus 
} 
#endif 
+2

喜歡幸福! –

-2

你應該用你的.C文件中的以下內容:

無效armfunctions :: readArms( void ...)(::之前的部分是你的.h文件中的類名)

+1

'c'是C源代碼文件的擴展名,不是C++的。 C中不存在名稱空間和類。將C++代碼寫入C文件不是有效的解決方案。 – 2mac