[英]Cannot convert parameter 4 from 'void' to 'const char *'
[英]cannot convert parameter from `const char *` to `char *`
鑒於此代碼:
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 *
為什么?
您正在調用的函數需要一個指向可修改緩沖區char*
的指針。 您正在傳遞一個指向不可修改緩沖區const char*
的指針。
由於您的member
函數不會修改其輸入,因此您應該更改其聲明以接收const char*
。
member::member(const char *ip)
好吧, data()
返回const char*
,因此是錯誤。 您應該更改member::member
以接收const char*
,因為無論如何要復制其值。
另外,請注意, sizeof(ip)
等於sizeof(char*)
,它只是指針的大小。 您應該改為傳遞this->ip_addr
緩沖區的大小。
因為定義了member :: member以便將char *作為參數,而string.data()給出了const char *作為值(因為它正在返回對其自身內存的引用)。 您可以使用const_cast或更改member :: member方法簽名。
更改此:
member::member(char *ip)
對此
member::member(const char *ip)
也就是說,您必須更改構造函數的參數類型。
另外,這也是一個更好的解決方案,只需將參數const std::string &
:
member::member(const std::string &)
這種方法可以使用由std::string
類提供的更好的接口。 這些接口比諸如strcpy
, strlen
, strcat
等的C字符串接口要好得多。
std :: string數據具有此簽名
const char* data() const;
您正在嘗試調用期望char *的成員c'tor,所以這是您的錯誤。
更改此: member::member(char *ip)
到此: member::member(const char *ip)
改變線
member::member(char *ip)
至
member::member(const char *ip)
而且,我不確定您是否使用strcpy_s
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.