1

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

添加到 c* 从 const char* 到 char* 的无效转换"

为什么从字符串常量到'char *'的转换在C中有效但在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]

发布(0, 0, 0, _generateMessageID(), 主题, msg);

                                              ^

我什至尝试过使用const std::string& topic = "SampleTopic";但收到此错误:

命名空间“std”中的“字符串”未命名类型

甚至const char* topic = (char*)"SampleTopic";并将其传递为func(topic)同样的错误。

我该如何解决这个问题?

4

1 回答 1

1

我对该函数一无所知,GSM_MQTT::publish()但如果它需要一些可修改的字符串(char *没有constTopicMessage那么你必须提供可修改的字符串。

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

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

另一方面,如果这个函数实际上不需要一些可修改的字符串,那么这可能是 API 中的一个错误,这些参数应该已经声明了const char *
如果确实如此,您可以在传递两个参数时安全地使用const_cast(甚至是传统的 C cast )。const char *

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

请注意,在您的示例中,您使用了预期"msgid"an的字符串。unsigned int

于 2019-07-29T17:34:32.390 回答