簡體   English   中英

二進制“ operator +”類型為“ const char [8]”和“ const char *”類型的無效操作數

[英]Invalid operands of types ‘const char [8]’ and ‘const char*’ to binary ‘operator+

我試圖寫這樣的Fopen語句:

FILE *fp;
fp = fopen("client." + receiver->get_identifier().c_str() + ".vol", "a+");

其中receiver-> get_identifier()返回一個字符串。 但是,標題出現錯誤。 我在這里閱讀了問題但沒有運氣,因為fopen的第一個參數是const char *。 我必須更改什么才能使其編譯?

receiver->get_identifier().c_str()

返回const char* ,而不是std::string ,因此operator+無法插入(它的一個參數必須是std::string )。 刪除c_str()並在最后使用std::string::c_str()應該可以解決問題

fopen(("client." + receiver->get_identifier() + ".vol").c_str(), "a+");

這是因為您將擁有const char*以及std::string ,並且operator+將起作用。

如果您可能想知道為什么不能為const char*定義operator+ ,那是因為C ++不允許對基本類型進行運算符重載。 至少一個參數必須是用戶定義的類型。

嘗試將第一個參數更改為

(string("client.") + receiver->get_identifier() + ".vol").c_str()

這將添加帶有C樣式字符串的std::string對象, 這可以完成 ,並且僅在末尾使用字符指針(通過.c_str() )。 您的代碼現在嘗試添加C樣式字符串,這是不可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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