簡體   English   中英

無法將參數從const char *轉換為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類提供的更好的接口。 這些接口比諸如strcpystrlenstrcat等的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM