当我尝试将字符串对象与其他字符串连接时,我会得到一个“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");
}
为什么我不能一起“+”字符串?
答案 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
会很浪费。)
现在您的原始用法很好。