我正在使用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/

10-10 08:03