gpt4 book ai didi

c++ - 错误:在给定的命令集中从 ‘int’到 ‘void*’ [-fpermissive]的无效转换

转载 作者:行者123 更新时间:2023-12-02 10:18:06 25 4
gpt4 key购买 nike

我有如下的c++文件,

#include <iostream> 
using namespace std;

extern "C" {
#include "sample_publish.c"
}


int main()
{

int antenna_id = 123;
send_message_to_mqtt(&antenna_id);

}

我已经在c++文件中包含了一个c文件,我需要将变量Antenna_id传递给函数send_message_to_mqtt,并且在c文件中也是如此,如下所示。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "MQTTClient.h"

void send_message_to_mqtt(int *antenna_id) {
MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
MQTTClient_message pubmsg = MQTTClient_message_initializer;
MQTTClient_deliveryToken token;
int rc;

MQTTClient_create(&client, "tcp://mqtt1.mindlogic.com:1883", "ExampleClientPub",
MQTTCLIENT_PERSISTENCE_NONE, NULL);
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;

if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
{
printf("Failed to connect, return code %d\n", rc);
exit(EXIT_FAILURE);
}


printf("DATA FROM C++:::%d\n", *antenna_id);

char payload_data[] = "hi";

//pubmsg.payload = payload_data;
pubmsg.payload = *antenna_id
pubmsg.payloadlen = (int)strlen(*antenna_id);
pubmsg.qos = 1;
pubmsg.retained = 0;
MQTTClient_publishMessage(client, "MQTT-Examples", &pubmsg, &token);
printf("Waiting for up to %d seconds for publication of %s\n""on topic %s for client with ClientID: %s\n",(int)(10000L/1000), "Hello World!", "MQTT-Examples", "ExampleClientPub");
rc = MQTTClient_waitForCompletion(client, token, 10000L);
printf("Message with delivery token %d delivered\n", token);
MQTTClient_disconnect(client, 10000);
MQTTClient_destroy(&client);
// return rc;
}

当我执行c++文件时,c文件中无法访问antenna_id变量,这又使我无法针对pubmsg.payload进行映射,这是由于以下错误所致,
dell@dell-Inspiron-5379:~/workspace_folder$ g++ sample.cpp -o sample -lpaho-mqtt3c
In file included from sample.cpp:5:0:
sample_publish.c: In function ‘void send_message_to_mqtt(int*)’:
sample_publish.c:30:22: error: invalid conversion from ‘int’ to ‘void*’ [-fpermissive]
pubmsg.payload = *antenna_id
^~~~~~~~~~~
sample_publish.c:31:5: error: expected ‘;’ before ‘pubmsg’
pubmsg.payloadlen = (int)strlen(*antenna_id);
^~~~~~

如何克服这一难题?

最佳答案

关于这个问题的猜测,很可能是以下一行:

pubmsg.payload = *antenna_id

有效载荷除了缺少分号外,还指向要发送的数据的第一个字节。也就是说,您不应取消引用指针:
pubmsg.payload = antenna_id;

与此相关的是,这行也是非常错误的:
pubmsg.payloadlen = (int)strlen(*antenna_id);
strlen函数将获取长度为null的字节 字符串的长度。
int的长度可以通过 sizeof运算符获得:
pubmsg.payloadlen = sizeof *antenna_id;

请注意,这里必须使用解引用运算符,否则将获得指针本身的大小。

关于c++ - 错误:在给定的命令集中从 ‘int’到 ‘void*’ [-fpermissive]的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61262888/

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