2012-05-11 164 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