gpt4 book ai didi

c++ - 错误 : 'argument' does not name a type, 假设 .cpp 和 .h 文件有问题

转载 作者:行者123 更新时间:2023-11-28 04:56:00 26 4
gpt4 key购买 nike

我读了几个小时关于这个问题(似乎很常见),但没有找到任何适用于我的情况的解决方案。我知道可能存在与包含的文件和库相关的问题,但我实际上无法找到问题所在。

这是一个使用 MQTT 客户端库的 Arduino 脚本。它与旧的 PubSubClient.h 库完美配合。

现在我想用最近的更新库。函数定义已更改,因此我在草图中进行了更改并切换了 Arduino/library 目录中的库,然后重新启动了 Arduino IDE。我收到很多“错误:‘argument’没有命名类型”,我真的不知道要修复什么。

在这里您可以找到 .h 和 .cpp 文件组织以了解正在发生的事情。

//device.ino文件

#include "device.h"

//device.h文件

#ifndef DEVICE_H
#define DEVICE_H

#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPUpdateServer.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <jsmn.h>
#include <Arduino.h>
#include <pgmspace.h>
#include "mqtt.h"

#endif

mqtt.h文件

#ifndef MQTT_H
#define MQTT_H

#include "device.h"

#endif

mqtt.cpp文件

#include "mqtt.h"

WiFiClient wifi_client;
PubSubClient mqtt_client(wifi_client);
mqtt_client.setServer(mqtt_server, MQTT_BROKER_PORT);
mqtt_client.setCallback(mqtt_callback);

最后是编译器抛出的错误: mqtt.cpp:19: 错误: 'mqtt_client' 没有命名类型

     mqtt_client.setServer(mqtt_server, MQTT_BROKER_PORT);

^

mqtt.cpp:20: error: 'mqtt_client' does not name a type

mqtt_client.setCallback(mqtt_callback);

^

sketch\mqtt.cpp: In function 'void mqtt_publish_mex(String, String, bool)':

mqtt.cpp:27: error: no matching function for call to 'PubSubClient::publish(String&, String&, bool&)'

if (mqtt_client.publish(topic, jmex, retained)) {

^

sketch\mqtt.cpp:27:54: note: candidates are:

In file included from sketch\Walvola.h:25:0,

from sketch\mqtt.h:4,

from sketch\mqtt.cpp:1:

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:130:12: note: boolean PubSubClient::publish(const char*, const char*)

boolean publish(const char* topic, const char* payload);

^

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:130:12: note: candidate expects 2 arguments, 3 provided

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:131:12: note: boolean PubSubClient::publish(const char*, const char*, boolean)

boolean publish(const char* topic, const char* payload, boolean retained);

^

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:131:12: note: no known conversion for argument 1 from 'String' to 'const char*'

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:132:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int)

boolean publish(const char* topic, const uint8_t * payload, unsigned int plength);

^

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:132:12: note: no known conversion for argument 1 from 'String' to 'const char*'

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:133:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int, boolean)

boolean publish(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained);

^

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:133:12: note: candidate expects 4 arguments, 3 provided

sketch\mqtt.cpp: In function 'void mqtt_log(String)':

mqtt.cpp:347: error: no matching function for call to 'PubSubClient::publish(const String&, String&)'

mqtt_client.publish(mqtt_controllers_topic_debug, json_string);

^

sketch\mqtt.cpp:347:70: note: candidates are:

In file included from sketch\Walvola.h:25:0,

from sketch\mqtt.h:4,

from sketch\mqtt.cpp:1:

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:130:12: note: boolean PubSubClient::publish(const char*, const char*)

boolean publish(const char* topic, const char* payload);

^

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:130:12: note: no known conversion for argument 1 from 'const String' to 'const char*'

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:131:12: note: boolean PubSubClient::publish(const char*, const char*, boolean)

boolean publish(const char* topic, const char* payload, boolean retained);

^

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:131:12: note: candidate expects 3 arguments, 2 provided

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:132:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int)

boolean publish(const char* topic, const uint8_t * payload, unsigned int plength);

^

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:132:12: note: candidate expects 3 arguments, 2 provided

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:133:12: note: boolean PubSubClient::publish(const char*, const uint8_t*, unsigned int, boolean)

boolean publish(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained);

^

C:\Users\Fabrizio & Dario\Documents\Arduino\libraries\pubsubclient\src/PubSubClient.h:133:12: note: candidate expects 4 arguments, 2 provided

In file included from sketch\mqtt.h:4:0,

from sketch\mqtt.cpp:1:

sketch\mqtt.cpp: In function 'void mqtt_callback(char*, byte*, unsigned int)':

mqtt.cpp:375: error: request for member 'payload_string' in 'payload', which is of non-class type 'byte* {aka unsigned char*}'

log(payload.payload_string());

^

sketch\Walvola.h:89:67: note: in definition of macro 'log'

#define log(mex) if (DEBUG) {Serial.println(walvola_time + "::" + mex);Serial.flush(); if(MQTT_DEBUG) {mqtt_log(walvola_time + "::" + mex);}}

^

mqtt.cpp:375: error: request for member 'payload_string' in 'payload', which is of non-class type 'byte* {aka unsigned char*}'

log(payload.payload_string());

^

sketch\Walvola.h:89:135: note: in definition of macro 'log'

#define log(mex) if (DEBUG) {Serial.println(walvola_time + "::" + mex);Serial.flush(); if(MQTT_DEBUG) {mqtt_log(walvola_time + "::" + mex);}}

^

mqtt.cpp:379: error: request for member 'payload_string' in 'payload', which is of non-class type 'byte* {aka unsigned char*}'

if (mqtt2JSONkvs(payload.payload_string())) {

^

mqtt.cpp:404: error: a function-definition is not allowed here before '{' token

{

^

mqtt.cpp:512: error: expected '}' at end of input

}

^

Più di una libreria trovata per "WiFiClient.h"
Usata: C:\Users\Fabrizio & Dario\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi
Non usata: C:\Program Files (x86)\Arduino\libraries\WiFi
Non usata: C:\Program Files (x86)\Arduino\libraries\WiFi
Non usata: C:\Program Files (x86)\Arduino\libraries\WiFi
Non usata: C:\Program Files (x86)\Arduino\libraries\WiFi
exit status 1
'mqtt_client' does not name a type

感谢您的帮助!

最佳答案

写作时

WiFiClient wifi_client;
PubSubClient mqtt_client(wifi_client);
mqtt_client.setServer(mqtt_server, MQTT_BROKER_PORT);
mqtt_client.setCallback(mqtt_callback);

前两行没问题 => 你正在声明名为 wifi_clientmqtt_client 的全局变量

问题出在电话上

mqtt_client.setServer(mqtt_server, MQTT_BROKER_PORT);
mqtt_client.setCallback(mqtt_callback);

您可以在全局范围内声明变量,但不能在函数外调用函数(除非是用于全局变量初始化),这就是为什么会出现此错误。您指出的示例不同,因为变量在函数中,因此在之后调用它们的方法是合法的:您在函数上下文中。

例如,您需要在 main() 函数中移动调用,以便代码有效。

也就是说,将全局变量放在 header 中可能会给您带来更多麻烦,因为您包含来自不同 cpp 文件的文件,编译器会提示多个定义,但这(目前)还不是这里的问题。

关于c++ - 错误 : 'argument' does not name a type, 假设 .cpp 和 .h 文件有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47121575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com