2012-05-11 223 views
2

我有一個函數期望一個字符串,我想要將const char *連接到要返回的字符串。連接char *到字符串

下面是示例代碼來幫助說明這樣的情景:

void TMain::SomeMethod(std::vector<std::string>* p) 
{ 
    p->push_back(TAnotherClass::Cchar1 + "/" + TAnotherClass::Cchar2); 
} 

,這裏是另一類這些都是:

class TAnotherClass 
{ 
public: 
    static const char * Cchar1; 
    static const char * Cchar2; 
}; 

const char * TAnotherClass::Cchar1 = "Home"; 
const char * TAnotherClass::Cchar2 = "user"; 

即時得到以下錯誤: 類型的無效操作數「 const char *'和'const char *'給二元運算符+

爲什麼這是無效的?請幫助

+1

除了已經說過的內容之外,不要將指針傳入方法,而應該使用引用! –

回答

6

char const*不能與+運算符一起使用,如錯誤所述。

你需要做的是什麼:

p->push_back(std::string(TAnotherClass::Cchar1) + "/" + TAnotherClass::Cchar2); 
      //^^^^^^^^^^^^ notice this 

它創建std::string類型的臨時對象,那麼你可以使用+它。它連接字符串,一路創建臨時對象,並最終將最終字符串傳遞給push_back

除此之外,作爲@Konrad的評論指出,不傳遞一個指針到方法,使用參考,而不是,如:

void TMain::SomeMethod(std::vector<std::string> & p) //<-- note & 
{ 
    p.push_back(std::string(TAnotherClass::Cchar1)+"/"+TAnotherClass::Cchar2); 
} 
+2

更具體地說,沒有重載需要兩個'const char *'s。 – chris

+0

謝謝,我試圖避免std ::轉換爲可能,但如果多數民衆贊成在唯一的辦法:) – user1381456

0

因爲你想添加兩個指針。 +運算符不能被char *覆蓋。

你可以這樣做:

p->push_back(std::string(TAnotherClass::Cchar1) + "/" + TAnotherClass::Cchar2); 

記住,std::string(...)的使用功能符號上面使用的是C樣式轉換的事實。在這種情況下,它相當於static_cast<std::string>(...)

是否允許代碼中的函數式樣轉換取決於您。有些政策違反所有C風格演員。在我以前的工作場所,這種特殊用途是允許的,但沒有其他用途。

+0

感謝指出,也出 – user1381456