Ошибка: недопустимые операнды типов «const char *» и «const char [7]» для двоичного «оператора +»

Я пытаюсь создать таблицу с переменным количеством столбцов. YH (я, 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;
}

Я попробовал следующее —

для (int l = 1; l<= d; l ++) {командная строка + = «, Y» l «real»;}

для (int l = 1; l<= d; l ++) {командная строка + = «, Y» + std :: string (l) + «real»;}

Ни один из них, кажется, не работает.

1

Решение

Вы не можете использовать + объединить целое число в строку. Когда ты пишешь

", Y" + l

это добавляет l на указатель на строковый литерал, и это просто возвращает другой указатель. Затем, когда вы делаете + " real" он пытается добавить указатель на этот массив, но нет такой перегрузки для + оператор. + может использоваться только для объединения, когда хотя бы один из аргументов является std::string,

std::string(l) тоже не работает. Это не то, как вы получаете строковое представление числа. Функция, которую вы хотите std::to_string(l),

commandline += ", Y" + std::to_string(l) + " real ";
1

Другие решения

Альтернативный подход до C ++ 11:

Документация по 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;
}
0

По вопросам рекламы [email protected]