C ++从'const char *'到'char *'Arduino Uno的无效转换

时间:2019-07-29 17:21:22

标签: c++ arduino arduino-uno arduino-c++

我已经浏览了以下链接,但无法正常工作:

  

Adding to c* invalid conversion from const char* to char*"

     

Why is conversion from string constant to 'char*' valid in C but invalid in C++

我正在研究arduino Uno。我需要将类型char*的参数发送给函数。我有以下代码:

const char* topic = "SampleTopic";
const char* msg = "Hello";
publish(0, 0, 0, "msgid", topic, msg);

我收到此错误:

  

初始化'void GSM_MQTT :: publish(char,char,char,unsigned int,char *,char *)'的参数5

     

void publish(char DUP,char Qos,char RETAIN,unsigned int MessageID,char * Topic,char * Message);

     

警告:从'const char *'到'char *'的无效转换[-fpermissive]

     

publish(0,0,0,_generateMessageID(),topic,msg);

                                              ^

我什至尝试使用const std::string& topic = "SampleTopic";,但出现此错误:

  名称空间“ std”中的

“字符串”未命名类型

即使const char* topic = (char*)"SampleTopic";并将其传递为func(topic)也会产生相同的错误。

我该如何解决??

1 个答案:

答案 0 :(得分:1)

我对GSM_MQTT::publish()函数一无所知,但是如果它需要用于char *的一些可修改的字符串(const而没有Topic)和Message,则必须提供可修改字符串。

char topic[] = "SampleTopic";
char msg[] = "Hello";

(您必须确保存储空间足以进行修改)

另一方面,如果此功能实际上不需要需要一些可修改的字符串,则可能是API中的错误,应将这些参数声明为const char *
如果确实是这种情况,则可以在传递两个const_cast参数时安全地使用const char *(甚至是传统的C cast )。< / p>

const char* topic = "SampleTopic";
const char* msg = "Hello";
publish(0, 0, 0, ???msgid???, const_cast<char *>(topic), const_cast<char *>(msg));

请注意,在您的示例中,您使用字符串"msgid",其中应使用unsigned int