无法将参数从`const char *`转换为`char *`

时间:2011-10-17 08:44:55

标签: c++ string

鉴于此代码:

void group::build(int size, std::string *ips){
/*Build the LL after receiving the 
member list from bootstrap*/
head = new member("head");
member *temp1,*temp2;

temp1 = new member(ips[0].data());  // error here
    // ....
}

member::member(char *ip){
strcpy_s(this->ip_addr,sizeof(ip),ip);
this->next = NULL;
this->previous = NULL;
}

指向字符串的指针定义为:

std::string *ips;

我想用字符串初始化数组ips但是当我尝试从任何数组成员获取char数据时,我得到错误:

  

无法将参数从const char *转换为char *

为什么?

6 个答案:

答案 0 :(得分:3)

您正在调用的函数需要一个指向可修改缓冲区char*的指针。您正在将指针传递给不可修改的缓冲区const char*

由于您的member函数未修改其输入,因此您应更改其声明以接收const char*

member::member(const char *ip)

答案 1 :(得分:1)

好吧,data()会返回const char*,因此会出错。您应该更改member::member以接收const char*,因为您正在复制其值。

另请注意,sizeof(ip)等于sizeof(char*),这只是指针的大小。您应该改为传递this->ip_addr缓冲区的大小。

答案 2 :(得分:1)

因为member :: member被定义为将char *作为参数,而string.data()将const char *作为一个值(因为它返回对它自己的内部存储器的引用)。您可以使用const_cast或更改member :: member方法签名。

答案 3 :(得分:1)

改变这个:

member::member(char *ip)

到这个

member::member(const char *ip)

也就是说,你要改变构造函数的参数类型。


或者,这也是一个更好的解决方案,只需创建参数const std::string &

member::member(const std::string &)

这种方法允许使用std::string类提供的更好的接口。这些接口比C-string接口要好得多,例如strcpystrlenstrcat等。

答案 4 :(得分:1)

std :: string数据具有此签名

const char* data() const;

你试图调用成员c'tor,期望char *所以这是你的错误。

更改此内容:member::member(char *ip)

对此:member::member(const char *ip)

答案 5 :(得分:0)

更改行

member::member(char *ip)

member::member(const char *ip)

并且,我不确定您对strcpy_s

的使用情况