我已经浏览了以下链接,但无法正常工作:
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)
也会产生相同的错误。
我该如何解决??
答案 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
。