我正在尝试创建一个包含可变列数的表。 YH(i,Y1,Y2 ...... Yd)
所以我在查询中创建了一个for循环。但它显示以下错误 -
error: invalid operands of types ‘const char*’ and ‘const char [7]’ to binary ‘operator+’ for(int l=1;l<=d;l++) {commandline+=", Y"+ l +" real ";}
主要代码如下 -
string commandline;
commandline = "DROP TABLE YH";
if(SQL_SUCCESS != SQLExecDirect(hdlStmt, (SQLCHAR*)(commandline.c_str()), SQL_NTS))
{
cout<<"The drop YH table is unsuccessful."<<endl;
}
commandline = "CREATE TABLE YH"
"(i int primary key ";
for(int l=1;l<=d;l++) {
commandline+=", Y"+l+" real ";
}
commandline+=" ) ";
if(SQL_SUCCESS != SQLExecDirect(hdlStmt, (SQLCHAR*)(commandline.c_str()), SQL_NTS))
{
cout<<"The create table sql command hasn't been executed successfully."<<endl;
}
我尝试了以下内容 -
for(int l = 1; l&lt; = d; l ++){commandline + =&#34;,Y&#34; l&#34;真实&#34 ;;}
for(int l = 1; l&lt; = d; l ++){commandline + =&#34;,Y&#34; + std :: string(l)+&#34;真实&#34 ;;}
他们似乎都没有工作。
答案 0 :(得分:1)
您不能使用+
将整数连接到字符串。当你写
", Y" + l
它将l
添加到指向字符串文字的指针,并且只返回另一个指针。然后,当你执行+ " real"
时,它会尝试将指针添加到该数组,但+
运算符没有这样的重载。 +
只能在至少有一个参数为std::string
时才能用于连接。
std::string(l)
也不起作用。那不是你如何获得数字的字符串表示。您想要的功能是std::to_string(l)
。
commandline += ", Y" + std::to_string(l) + " real ";
答案 1 :(得分:0)
替代预C ++ 11方法:
Documentation on std::ostringstream
简而言之,ostringstream
允许您的程序写入自调整大小的缓冲区,该缓冲区可以像写入任何其他任何其他输入流一样轻松转换为string
。例如,像cout
一样。
// create the ostringstream around the initial string data
ostringstream commandline("CREATE TABLE YH (i int primary key ");
for(int l=1;l<=d;l++) {
// write into the ostringstream. l will automatically be converted from a number
commandline << ", Y" << l <<" real ";
}
commandline << " ) ";
// (str() gets the string from the ostringstream.
// c_str() converts this string into a character array
if(SQL_SUCCESS != SQLExecDirect(hdlStmt, (SQLCHAR*)(commandline.str().c_str()), SQL_NTS))
{
cout<<"The create table sql command hasn't been executed successfully."<<endl;
}