繁体   English   中英

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

[英]C++ invalid conversion from 'const char*' to 'char*' Arduino Uno

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

向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'

无效发布(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)传递同样的错误。

我该如何解决?

我对GSM_MQTT::publish()函数GSM_MQTT::publish()但是如果它需要 TopicMessage一些可修改字符串( char *不带const ),那么您必须提供可修改字符串。

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

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

在另一方面,如果这个功能实际上并不需要一些修改字符串,那么它可能是在API中的错误,这些参数应被宣布const char *
如果确实是这种情况,则可以在传递两个const char *参数时安全地使用const_cast (甚至是传统的C cast )。

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

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

暂无
暂无

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

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