将2+个字符串连接到1个字符串

时间:2018-04-03 21:13:50

标签: c++ mysql string

当我尝试将字符串对象与其他字符串连接时,我会得到一个“basic_string”,我的方法不接受它。

我收到以下错误:

  

错误:没有匹配的调用函数   “的Class1 :: doSomething的(标准:: __ cxx11 :: basic_string的)”

我的主要课程:

Integer

我的“class1”:

using namespace std;
int main() {
    string s = "test";
    Class1* class1 = new Class1();
    class1->doSomething("some text " + s + " too");
}

为什么我不能一起“+”字符串?

1 个答案:

答案 0 :(得分:3)

你可以。

该错误与+无关。

错误是因为您要将std::string传递给想要const char*的函数,而且这两件事情并不相同。

可修复,因为std::string有一个成员函数c_str(),它为你提供了一个C风格的字符串,正好适用于这种场合:

class1->doSomething(("some text " + s + " too").c_str());

顺便说一下,最小的例子就是:

std::string str = "hi";
Class1 class1;
class1.doSomething(str);

然后你就已经知道+已经无关了。

如果Class1属于您,您可能会发现允许您的类接受C ++字符串更为惯用,只在必要时“转换”MySQL API:

void doSomething(const std::string& sql) {
    doSomething(sql.c_str());
}

void doSomething(const char* sql) { 
    mysqli_query(connection, sql);
}

(我保留了原始的重载,因为如果你原来有一个C字符串,那么为这个函数调用构造一个std::string会很浪费。)

现在您的原始用法很好。