| const char* In file included from C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Stream.h:27, from C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/HardwareSerial.h:32, from C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Arduino.h:303, from C:\Users\conservator\AppData\Local\Temp\arduino\sketches\304EB848CF381B8A7A8E84D646752A81\sketch\mqttToAliyun.ino.cpp:1: C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Print.h:105:16: note: candidate: 'size_t Print::println(long int, int)' (near match) 105 | size_t println(long, int = DEC); | ^~~~~~~ C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Print.h:105:16: note: conversion of argument 1 would be ill-formed: C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino:130:24: error: invalid conversion from 'const char*' to 'long int' [-fpermissive] 130 | Serial.println("%d",sensor[2]);
时间: 2023-08-09 09:08:42 浏览: 213
这个错误是因为在第130行中,你尝试将一个 `const char*` 类型的字符串传递给 `println` 函数,而 `println` 函数的参数应该是一个 `long int` 类型的整数。这样的类型不匹配导致了编译错误。
要解决这个问题,你需要将传递给 `println` 函数的参数转换为 `long int` 类型。你可以使用 `atol` 函数将字符串转换为长整数,然后再传递给 `println` 函数。下面是一个可能的解决方法:
```cpp
Serial.println(atol(sensor[2]));
```
这样,`atol` 函数将 `sensor[2]` 字符串转换为长整数,然后将其传递给 `println` 函数。请确保在使用 `atol` 函数之前,你已经包含了 `<cstdlib>` 头文件。
相关问题
C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Print.h:93:16: note: conversion of argument 1 would be ill-formed: C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino:128:18: error: invalid conversion from 'const char*' to 'long long int' [-fpermissive] 128 | Serial.print("%d",sensor[0]); | ^~~~ | | | const char* In file included from C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Stream.h:27, from C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/HardwareSerial.h:32, from C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Arduino.h:303, from C:\Users\conservator\AppData\Local\Temp\arduino\sketches\304EB848CF381B8A7A8E84D646752A81\sketch\mqttToAliyun.ino.cpp:1: C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Print.h:94:16: note: candidate: 'size_t Print::print(long long unsigned int, int)' (near match) 94 | size_t print(unsigned long long, int = DEC); | ^~~~~ C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Print.h:94:16: note: conversion of argument 1 would be ill-formed: C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino:128:18: error: invalid conversion from 'const char*' to 'long long unsigned int' [-fpermissive] 128 | Serial.print("%d",sensor[0]); | ^~~~ | | | const char* exit status 1 Compilation error: no matching function for call to 'print(const char [3], int&)'
这个错误是因为 `Serial.print()` 函数的参数传递方式不正确。`print()` 函数的第一个参数应该是一个字符串,而你传递了一个格式化字符串。在 Arduino 中,你可以使用 `%d` 来打印整数值,但是在这里你需要使用 `Serial.print()` 函数的两个参数版本来打印传感器值。
以下是修正后的代码示例:
```cpp
Serial.print("Sensor Value: ");
Serial.println(sensor[0]);
```
这样就可以正确打印传感器值了。记得在修改完代码后重新编译和上传到你的硬件设备上。
C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino: In function 'void processData(char*)': C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino:120:26: error: invalid conversion from 'char' to 'const char*' [-fpermissive] 120 | value[0]=10*atoi(data[0]) | ~~~~~~^ | | | char In file included from c:\users\conservator\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.1.0-gcc10.3-e5f9fec\xtensa-lx106-elf\include\c++\10.3.0\cstdlib:75, from c:\users\conservator\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.1.0-gcc10.3-e5f9fec\xtensa-lx106-elf\include\c++\10.3.0\stdlib.h:36, from C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Arduino.h:27, from C:\Users\conservator\AppData\Local\Temp\arduino\sketches\304EB848CF381B8A7A8E84D646752A81\sketch\mqttToAliyun.ino.cpp:1: c:\users\conservator\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.1.0-gcc10.3-e5f9fec\xtensa-lx106-elf\include\stdlib.h:85:23: note: initializing argument 1 of 'int atoi(const char*)' 85 | int atoi (const char *__nptr); | ~~~~~~~~~~~~^~~~~~ C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino:120:28: error: expected ';' before 'Serial' 120 | value[0]=10*atoi(data[0]) | ^ | ; 121 | Serial.println(value[0]); | ~~~~~~ exit status 1 Compilation error: invalid conversion from 'char' to 'const char*' [-fpermissive]
根据报错信息,你在代码中有一个类型转换错误。`atoi()` 函数接受一个指向字符数组的指针作为参数,但你却将一个字符传递给了它。
在你的代码的第 120 行,你需要将 `data[0]` 作为指向字符数组的指针传递给 `atoi()` 函数。修正后的代码如下:
```arduino
value[0] = 10 * atoi(&data[0]);
Serial.println(value[0]);
```
请注意,`&data[0]` 表示 `data` 数组的第一个元素的地址,它是指向字符数组的指针,可以作为 `atoi()` 函数的参数。
另外,根据报错信息,你可能还需要包含 `stdlib.h` 头文件来使用 `atoi()` 函数。在你的代码中可能已经包含了这个头文件,但是报错信息中显示了一些 Arduino 内部的头文件,可能导致冲突。请确保只包含所需的头文件,并检查是否已正确引入 `stdlib.h`。
阅读全文