2014-03-25 24 views
2

我有幾個常用於不同Arduino程序的日誌記錄功能。由於我非常使用它們,我決定嘗試爲它們製作一個自定義庫。不幸的是,在有錯誤的頭文件的編譯器崩潰:「unknown type name'String'」創建自定義Arduino庫時

未知類型名「字符串」

我有點困惑,爲什麼發生這種情況,因爲我包括標準的Arduino庫(我相信應該包含字符串類)在我的頭頂部。下面是整個事情:

#ifndef logging_h 
#define logging_h 

#include "Arduino.h" 

void logEvent(String msg); 
void debugOut(String msg); 
void errOut(String err); 
void document(String parameter, float value); 

#endif 

我重新安裝了Arduino IDE(1.0.5),所以我想我應該有最新的標準庫。如果有人有一些建議,我會很感激。

+0

你的代碼適用於Arduino IDE 1.0.5。我將它添加爲名爲「logging.h」的新選項卡。你要遵循什麼步驟來創建你的庫? –

+0

現在我只有.h和.c文件與我的main.ino文件在同一個目錄中。它們都顯示爲分別名爲logging.h和logging.c的標籤。 除此之外,我還沒有做任何特別的創建庫 – sdrendall

+0

嘗試將「.c」文件重命名爲「.cpp」。 –

回答

2

(這個答案是基於我們的意見的討論。)

的問題是,你的庫源文件被命名爲*.c。這導致編譯器將其視爲C代碼而不是C++,這意味着它無法處理類/對象(例如String)。

命名文件*.cpp反而讓編譯器正確地將它視爲C++代碼。

-1

昨天我有同樣的問題。你在問題中包含的代碼應該是你的.h文件,不是嗎?我的問題是:是用C語言還是C++語言編寫的庫?

我假設你使用C代碼。

您無法使用Arduino IDE從用戶C庫導入代碼。原因是使用C++代碼,並且它不能從C庫中調用。

解決方案:用C +重寫你的庫,這並不難。

你可以在google上找到很多關於如何在C++中編寫庫的幫助。您還可以檢查我的例子在https://github.com/romain-viollette/AverageFilter/

最好的問候,

+0

我對你的意思有點困惑。你的意思是我必須將我的函數重寫爲C++類嗎?我的理解是,一個C++編譯器應該能夠編譯C代碼,那麼用'C'編寫的庫本質上應該是'用C++'嗎? – sdrendall

+0

我還不夠清楚。 我的意思是我認爲從C文件中調用Serial函數是不可能的。 所有內容都使用g ++編譯C和C++文件。但是我注意到,當你從C文件中包含,因爲它是單獨編譯的,所有C++函數都不包含在內。我的解決方案是用C++重寫我的庫,並且可以毫無問題地導入我想要的所有Arduino庫。也許你應該看看這裏:http://arduino.cc/en/Hacking/BuildProcess –

+0

啊我看,這是有道理的。問題最終通過將我的.c文件重命名爲.cpp來解決,這與您的解釋看起來一致。謝謝您的幫助! – sdrendall