我有一个期望字符串的函数,我想将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 *'的无效操作数为二元运算符+
为什么这不起作用?请帮忙
答案 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风格的演员表。在我之前的工作场所中,允许使用它们,但不允许使用它们。