10

可能重复:
如何在一行上连接多个 C++ 字符串?

根据this C++ std::string 使用operator+ 连接。那为什么这段代码

using namespace std;
string sql = "create table m_table(" + 
    "path TEXT," +
    "quality REAL," +
    "found INTEGER);"; 

导致这个错误?

'const char [22]' 和 'const char [17]' 类型的无效操作数到二进制 'operator+'

4

3 回答 3

14

克里斯说了什么,但在这种特殊情况下,你可以做

string sql = "create table m_table("
    "path TEXT,"
    "quality REAL,"
    "found INTEGER);"; 

这将在编译时连接字符串。

于 2012-10-05T18:18:42.900 回答
12

您需要将其显式转换为字符串以匹配参数列表:

string sql = std::string("create table m_table(") + 
"path TEXT," +
"quality REAL," +
"found INTEGER);"; 

现在第一个是与 a 匹配的字符串const char[N],它匹配其中一个operator+重载并返回一个 new std::string,用于重复其余的过程。

于 2012-10-05T18:16:10.150 回答
1

更好的方法是使用 std::ostringstream

#include <sstream>

const std::string myFunc(const std::string& s1, const std::string& s2)
{
  std::ostringstream os;
  os<<s1<<" "<<s2;
  return os.str();
}

优点是您也可以使用 std::ostream << 运算符重载来字符串化非字符串值

于 2012-10-05T18:25:55.767 回答