我在Arduino IDE中为MEGA2560和ESP8266使用相同的程序。编译和上传代码到Mega一切都很好。但是对于ESP8266代码没有编译。
代码是:
...
String s = F("TEl:+12345678912");
scrollText(3, s.c_str(), 1, 20);
...
void scrollText(byte row,char *p,byte space,int time_delay)
{
...
}
错误是:
initializing argument 2 of 'void scrollText(byte, char*, byte,int)' [-fpermissive]
invalid conversion from 'const char*' to 'char*' [-fpermissive]
scrollText(3, s.c_str(), 1, 20);
答案 0 :(得分:0)
问题是str::c_str()
会返回const char *
类型的变量,但您的函数scrollText(...)
需要char *
类型的参数。这是一个缩小的转换,通常这是一个坏主意(修改指针很容易导致你在最小的滑动中发生段错误或崩溃)。您可以在编译器中设置一些标志以忽略此转换警告,或者将参数类型更改为const char *
以匹配输入的类型(如果稍后在您尝试的函数中,将导致不同的编译器错误当声明为const时,将此参数变为mut)。选择你的解决方案,但我可以给你一些建议:除非你真的知道自己在做什么,否则永远不要相信指针和非指标。
编译Arduino但不编译ESP的原因是因为在Arduino的情况下,编译器默认启用-fpermissive
标志(忽略这种错误), ESP编译器不在哪里。这是一个Arduino缺陷,显然是一些非常古老的库,用这个标志编译,现在他们不想删除它,因为害怕破坏旧代码。你永远不应该需要这个标志,它只是为了传统目的,但今天我们知道的更好。