Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法将参数从`const char*`转换为`char*`_C++_String - Fatal编程技术网

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*
的大小,以字节为单位,与字符串的长度无关。