与'operator='不匹配(操作数类型'String'且"void")
No match for 'operator=' (operand types are 'String' and 'void')
我正在查询一个使用NodeMCU ESP8266微控制器返回JSON字符串的网页。来自网页的响应如下所示:
{"1":true,"2":false,"3":false,"4":true,"5":true,"6":false,"7":false,"8":false}
我使用的代码如下所示:
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
String payload = "";
const char* ssid = "ssid";
const char* password = "password";
String url = "example.com/data.json";
void setup() {
Serial.begin(115200);
delay(2000); while (!Serial);
WiFi.begin(ssid, password);
while (WiFi.status() !=WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println(WiFi.localIP());
pinMode(D0, OUTPUT);
}
void loop() {
StaticJsonBuffer<100> jsonBuffer;
delay(5000);
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
Serial.println(httpCode);
Serial.println(http.getString());
if (httpCode > 0) {
payload = http.getString();
}
http.end();
JsonObject& root = jsonBuffer.parseObject(payload);
Serial.println(payload);
if(!root.success()) {
Serial.println("parseObject() failed");
}
if(root["1"] == true) {
Serial.println("true");
}
digitalWrite(D0, !digitalRead(D0));
}
我相信它无法解析的原因是有效载荷变量以尾随换行符结尾。然后我尝试payload = payload.trim();
但后来我得到了no match for 'operator=' (operand types are 'String' and 'void')
所以我尝试了同样的问题payload = payload.replace("n,"");
然后我再次尝试payload = String(payload);
失败。我做错了什么?
就像有人说的那样,trim
和replace
不会返回String
。它"返回"void
,错误消息告诉您正在尝试为字符串分配无效返回。放payload.trim();
就足够了.payload.replace("n","");
也是如此
但是payload.trim();
和payload.replace("n","");
不会做同样的事情。如文档中所述,trim()
删除尾随和前导空格,而replace("n","")
将删除字符串中的所有(且仅(换行符,即使它位于中间。
空格通常是指空格、换行符、制表符和其他一些杂项字符。
相关文章:
- 使用char类型将decimal转换为string,将string转换为decimal
- 与'operator='不匹配(操作数类型'String'且"void")
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 可以从std::string继承以提供类型一致性吗
- 运算符'<'不能应用于类型 'string' 和 'string' 的操作数
- 错误:无法传递非平凡类型"std::string"的对象和更多错误
- C++:将模板类型 char 转换为 std::string
- 当 std::make_tuple 是 r 值引用时,如何保留 std::string 类型
- 如果没有运行时错误,我无法从MYSQL_ROW转换为System::String类型
- 如果我在 C++ 中为 "std::string &" 类型的参数指定默认值,这会导致内存泄漏吗?
- C++函数通过strlen()运行'string'类型参数,将新值保存到虚拟类实例,将虚拟类传递给新函数。为什么?
- 用C++11对自己的String类型进行哈希
- 如何检查变量是否是std::string类型
- 集合类型:如何存储bool、string类型的列表
- 将double/float类型转换为string类型,保留科学记数法和精度
- 无法解析"string"类型日食C++
- 错误 C2678:二进制'=':未找到采用 'const std::string' 类型左侧操作数的运算符(或没有可接受的转换)
- 如何在int,string类型的映射上使用find
- 当C++函数参数列表中有String类型时,我可以使用C程序函数调用C++函数吗
- 参数传递-任何在c++中缩短String类型的方法