将char *连接到字符串

时间:2012-05-11 15:00:56

标签: c++

我有一个期望字符串的函数,我想将const 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 *'的无效操作数为二元运算符+

为什么这不起作用?请帮忙

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

因为你试图添加两个指针。无法为char *重写+运算符。

你可以这样做:

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

请记住,上面使用的std::string(...)是使用功能表示法的C风格转换。在这种情况下,它等同于static_cast<std::string>(...)

您是否允许代码中的函数样式转换由您决定。有些政策针对所有C风格的演员表。在我之前的工作场所中,允许使用它们,但不允许使用它们。