C++ 无法将参数从`const char*`转换为`char*`
鉴于此代码:C++ 无法将参数从`const char*`转换为`char*`,c++,string,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(c
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
,但是当我试图从任何数组成员获取字符数据时,我得到了错误:
无法将参数从const char*
转换为char*
为什么?嗯,data()
返回一个const char*
,因此出现错误。您应该更改member::member
以接收const char*
,因为您仍在复制它的值
另外,请注意
sizeof(ip)
等于sizeof(char*)
,这只是指针的大小。您应该改为传递this->ip\u addr
缓冲区的大小。因为member::member被定义为以char*作为参数,而string.data()将const char*作为值(因为它返回对自身内部内存的引用)。您可以使用const_cast或change member::member方法签名。您正在调用的函数需要一个指向可修改缓冲区的指针,char*
。您正在传递一个指向不可修改缓冲区的指针,const char*
member::member(const char *ip)
由于您的成员
函数不修改其输入,您应该更改其声明以接收常量字符*
member::member(const char *ip)
更改此项:
member::member(char *ip)
对此
member::member(const char *ip)
也就是说,您必须更改构造函数的参数类型
或者,这也是一个更好的解决方案,只需将参数
const std::string&
:
member::member(const std::string &)
这种方法允许使用
std::string
class提供的更好的接口。这些接口比C-string接口好得多,例如strcpy
,strlen
,strcat
等。std::string数据具有此特征
const char* data() const;
您正试图调用需要char*的成员c'tor,因此这里是您的错误
更改此项:member::member(char*ip)
对此:member::member(const char*ip)
更改行
member::member(char *ip)
到
而且,我不确定您使用的是
strcpy\u s
使用strcpy\u s
是错误的。首先,第二个参数是目标缓冲区的大小,但您没有提供它。其次,sizeof(ip)
是char*
的大小,以字节为单位,与字符串的长度无关。