簡體   English   中英

std :: string'+':無法添加兩個指針

[英]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.

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