' void(*)(const char *)'到' void(*)()' [-fpermissive]

时间:2017-08-22 07:53:38

标签: c++ arduino

我使用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

        ^

2 个答案:

答案 0 :(得分:4)

definition for addCommand

void addCommand(const char *, void(*)()); // Add commands to processing dictionary

所以它期望void(*)()(C ++中没有任何参数的函数,C中有任意参数),但是你给它一个const char*参数

pingHandler更改为

void pingHandler (void) {

编辑:

由于Arduino是C ++,你不需要括号内的void部分

void pingHandler () {

答案 1 :(得分:3)

addCommand的第二个参数应该是指向 无参数 的函数的指针,如the example所示。

尝试将pingHandler更改为:

void pingHandler () {
  const char *command = sCmd.next();
  Serial.println("PONG");
}