2017-01-08 45 views
1

我使用了一個名爲DS3231庫由rinkydinkelectronics 鏈接:http://www.rinkydinkelectronics.com/library.php?id=73(點擊手動)我該如何解決這個錯誤? (Arduino的鑄造)

我試圖運行下面的代碼

String alarmTime = "08:52:00"; 

     void loop(){ 
      if (rtc.getTimeStr() == alarmTime){ 
      alarmState = true; 
      } 
} 

,但我得到以下錯誤:

exit status 1 no match for 'operator==' (operand types are 'char*' and 'String')

但是庫手冊說,返回值是一個字符串,所以我不明白爲什麼這不應該工作:(

有人可以幫我解決這個問題或告訴我什麼可能是錯的?

謝謝!

+0

裹返回在'的std :: string(...)' –

+0

我不明白你的意思對不起,我什麼有點新意可言這個 你能告訴我你的意思嗎? –

+1

我會發佈一個答案。但請繼續練習C++編碼... –

回答

2

如果將其理解你的代碼的權利,要檢查兩個字符串是否相等。由於標準庫在Arduino IDE中不可用,所以您必須選擇不同的方式。將C字符串(char*)轉換爲String object

例子:

if(String(rtc.getTimerStr()) == alarmTime) { 
    .... 
} 

這應該工作。

+0

當我宣佈alarmTime爲: 的std :: string alarmTime = 「8點52分00秒」; 我得到一個錯誤: 「‘字符串’命名空間‘STD’沒有指定類型」 –

+1

嘗試改變的代碼 –

+0

如果一切正常,請接受的答案; d –

1

你試着用混淆性相似的名稱來比較兩個不同的東西。 A string(C風格字符串)是一個空終止的字符數組。這與String object不同。人們普遍認爲,如果使用內存有限的硬件,比如標準的Arduino板,如果可能的話,應該避免使用String類,因爲它會佔用更多內存,並可能導致動態內存分配導致內存碎片。更好地使用字符串,而實際上它們和String一樣簡單。

只使用字符串您的代碼:

char alarmTime[] = "08:52:00"; 

void loop() { 
    if (strcmp(rtc.getTimeStr(), alarmTime) == 0) { 
    alarmState = true; 
    } 
} 
相關問題