Ошибка: недопустимые операнды типов "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;
}

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

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

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

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

2 ответа

Решение

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

", Y" + l

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

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

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

Альтернативный подход до 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;
}
Другие вопросы по тегам