繁体   English   中英

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

[英]error: invalid conversion from ‘int’ to ‘void*’ [-fpermissive] in the given set of commands

我有如下 c++ 文件,

#include <iostream> 
using namespace std; 

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


int main() 
{ 

    int antenna_id = 123; 
    send_message_to_mqtt(&antenna_id);

} 

I have included a c file in c++ file and I need to pass the variable antenna_id to the function send_message_to_mqtt and the same is in c file like below one.

#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 文件中无法访问天线 ID 变量,这反过来又不允许我针对 pubmsg.payload 使用 map,这是由于以下错误,

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 function 用于获取空终止字节字符串的长度。

可以使用sizeof运算符获取int的长度:

pubmsg.payloadlen = sizeof *antenna_id;

注意这里你必须使用解引用操作符,否则你会得到指针本身的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM