我正在使用this Arduino库来标记化和解析通过串行端口接收的命令,但是我遇到了一些奇怪的指针问题。我在stackoverflow上看到了其他解决方案(如建议的那样),但是它们都没有帮助我解决问题。
请让我知道此addCommand
函数在做什么。一切对我来说似乎很好
调用pingHandler,将“PING”字符串传递给函数定义,仅此而已。
#include <SoftwareSerial.h>
#include "SerialCommand.h"
SerialCommand sCmd;
void pingHandler (const char *command) {
Serial.println("PONG");
}
void setup() {
Serial.begin(9600);
while (!Serial);
sCmd.addCommand("PING", pingHandler);
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available() > 0){
sCmd.readSerial();
}
}
我收到此错误
C:\Users\GK_Desk_07\Documents\Arduino\ArduinoSerialCommand\ArduinoUnity\ArduinoUnity.ino: In function 'void setup()':
C:\Users\GK_Desk_07\Documents\Arduino\ArduinoSerialCommand\ArduinoUnity\ArduinoUnity.ino:13:38: warning: invalid conversion from 'void (*)(const char*)' to 'void (*)()' [-fpermissive]
sCmd.addCommand("PING", pingHandler);
^
In file included from C:\Users\GK_Desk_07\Documents\Arduino\ArduinoSerialCommand\ArduinoUnity\ArduinoUnity.ino:2:0:
sketch\SerialCommand.h:84:8: note: initializing argument 2 of 'void SerialCommand::addCommand(const char*, void (*)())'
void addCommand(const char *, void(*)()); // Add commands to processing dictionary
^
最佳答案
addCommand
的第二个参数应该是指向使用而不是的函数的指针,如the example所示。
尝试将pingHandler
更改为:
void pingHandler () {
const char *command = sCmd.next();
Serial.println("PONG");
}
关于c++ - 'void(*)(const char * )' to ' void(*)()'[-fpermissive],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45811909/