2017-01-08 112 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; 
    } 
}