2

我有一个需要字符串的函数,我想将 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*'类型的无效操作数到二元运算符+

为什么这无效?请帮忙

4

2 回答 2

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);
}
于 2012-05-11T15:03:40.743 回答
0

因为您正在尝试添加两个指针。不能为 char* 覆盖 + 运算符。

你可以这样做:

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

请记住,std::string(...)上面使用的是使用函数符号的 C 风格转换。在这种情况下,它相当于static_cast<std::string>(...).

是否允许在代码中进行函数样式转换取决于您。一些政策反对所有 C 风格的演员表。在我以前的工作场所,这种特殊用途是允许的,但没有其他用途。

于 2012-05-11T15:04:07.973 回答