[英]std::string '+' : cannot add two pointers
為何分配
std::string s="aaa"+1
工作得很好
std::string s="aaa"+1+"bbb"
獲取錯誤Error 14 error C2110: '+' : cannot add two pointers
沒有+
運算符來連接C字符串。 C字符串只是指針( const char *
),所以如果你給它添加一個數字,它只會增加指針。 然后將其轉換為C ++字符串:
std::string s = "aaa" + 1
|=======|
"aa"
const char *
|==============|
"aa"
std::string
然后在第二步中失敗,當你嘗試連接第二個字符串時,因為雖然向指針添加一個常量仍然有意義(即使不是你的情況),但你無法理解添加兩個指針。
"aaa" + 1 + "bbb"
|========|
"aa"
const char *
|===|
const char *
為了確保你真正串連,不總結指針,我建議使用一個stringstream
。 這也可以確保您的常數被正確轉換為string
。
std::stringstream ss;
ss << "aaa" << 1 << "bbb";
std::string s = ss.str();
這適用於具有operator<<
重載的每種類型。
std::string s="aaa"+1;
這只是編譯,但很可能不會做你想要的:它將const char*
加上1,文字"aaa"
衰減,然后從該指針構造std::string
,得到s == "aa"
。
當使用operator+
連接字符串時,至少有一個操作數必須具有std::string
類型,另一個操作數可以是const char*
或可轉換為該std::string
的東西。 例如:
std::string s="aaa"+std::to_string(1);
要么
std::string s="aaa"+std::to_string(1)+"bbb";
第一個可行,因為"abc" + 1
實際上是字符串"bc"
(更改實際字符串以便於查看)。 它與做例如一樣簡單
char array[] = "abc;
std::string str = &array[1];
第二個不起作用,因為你不能以這種方式附加兩個字符串文字。 您需要確保其中一個已經是std::string
對象。
如果你想創建字符串"aaa1"
那么我建議你看看函數std::to_string
。
這是此上下文中的其他信息。 平均差的勒芒解決方案是使其工作一半:
void JTube::checkNode(ITCXMLNode current_node, char * tagName){
if(!current_node.d) {
string s = "XML tag missing:";
s = s + tagName;
exitreason(s);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.