'void (*)(const char*)' 'void (*)()' [-允许]
'void (*)(const char*)' to 'void (*)()' [-fpermissive]
我正在使用这个Arduino库来标记和解析通过串行端口接收的命令,但我有一些奇怪的指针问题。我在堆栈溢出上看到了其他一些解决方案(如建议的那样(,但它们都没有帮助我解决问题。
请让我知道我在这个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:UsersGK_Desk_07DocumentsArduinoArduinoSerialCommandArduinoUnityArduinoUnity.ino: In function 'void setup()':
C:UsersGK_Desk_07DocumentsArduinoArduinoSerialCommandArduinoUnityArduinoUnity.ino:13:38: warning: invalid conversion from 'void (*)(const char*)' to 'void (*)()' [-fpermissive]
sCmd.addCommand("PING", pingHandler);
^
In file included from C:UsersGK_Desk_07DocumentsArduinoArduinoSerialCommandArduinoUnityArduinoUnity.ino:2:0:
sketchSerialCommand.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
的定义是
void addCommand(const char *, void(*)()); // Add commands to processing dictionary
所以它需要一个void(*)()
(C++中没有任何参数的函数,在 C 中有任何任意参数(,但你给了它一个const char*
参数
将pingHandler
更改为
void pingHandler (void) {
编辑:
由于Arduino是C++因此您不需要括号内的void
部分
void pingHandler () {
addCommand
的第二个参数应该是指向不带参数的函数的指针,如示例中所示。
尝试将pingHandler
更改为:
void pingHandler () {
const char *command = sCmd.next();
Serial.println("PONG");
}
相关文章:
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- 'void (*)(const char*)' 'void (*)()' [-允许]
- 对 C++ 中的特定标头使用 extern C 关键字是否允许从 void* 转换为 char*?
- 如何在void*指针下检查运行时类型(允许简单类型,没有基类)?
- 为什么pthread_join给出此错误?[错误] 从'void*'到'void**'的转换无效 [-允许]
- 这里不允许函数定义:void encryption(ifstream encrypt_file,ofstream key
- 错误:从 'int' 到 'void*' 的转换无效 [-允许]
- 为什么不允许虚方法返回 void 指针
- 为什么 g++ 允许我将这个 void 函数视为任何东西
- 墨西哥:错误:从“void*”到“double*”的转换无效[-允许]
- 类型 void 的值不允许在 C++ 中出错
- 为什么允许将static_cast of void*转换为其他类型
- 为什么允许新运算符向每个指针类型返回*void
- 在 void 函数中允许返回"nothing"吗?
- 为什么允许强制转换为void(不是指针)?
- g++ 4.9.0允许对位置分配使用operator delete[](void*, size_t)
- G++ 编译器:从 'pthread_t {aka long unsigned int}' 到 'void* (*)(void*)' 的转换无效 [-允许]
- 不允许void的部分函数专门化-替代解决方案
- 为什么不允许使用0作为void*的默认非类型模板参数
- 为什么标准不允许"virtual void funcFoo() = 0 { }"?