Подтвердить что ты не робот

Не может преобразовать 'std:: basic_string <char>' to 'const char *' для аргумента '1' to 'int system (const char *)'

Я получаю эту ошибку: "недопустимые операнды типов" const char * 'и' const char [6] 'для двоичного' оператора + '", когда я пытаюсь скомпилировать мой script. Здесь должна быть ошибка:

string name = "john";
system(" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'");
4b9b3361

Ответ 1

Тип выражения

" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'"

есть std::string. Однако система функций имеет объявление

int system(const char *s);

то есть он принимает аргумент типа const char *

Не существует оператора преобразования, который бы неявно преобразовывал объект типа std::string в объект типа const char *.

Тем не менее класс std::string имеет две функции, которые явно делают это преобразование. Они c_str() и data() (последнее может использоваться только с компилятором, поддерживающим С++ 11)

Итак, вы можете написать

string name = "john";

system( (" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'").c_str() );

Нет необходимости использовать промежуточную переменную для выражения.

Ответ 2

std::string + const char* приводит к другому std::string. system не принимает a std::string, и вы не можете объединить char* с оператором +. Если вы хотите использовать код таким образом, вам понадобятся:

std::string name = "john";
std::string tmp = 
    "quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '" + 
    name + ".jpg'";
system(tmp.c_str());

См. std::string operator + (const char *)

Ответ 3

Как показывают все остальные ответы, проблема заключается в том, что добавление std::string и a const char* с использованием + приводит к std::string, а system() ожидает const char*. И решение заключается в использовании c_str(). Однако вы также можете сделать это без временного:

string name = "john";
system((" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'").c_str());

Ответ 4

Добавление строкового литерала с std::string дает другой std::string. system ожидает a const char*. Вы можете использовать std::string::c_str() для этого:

string name = "john";
string tmp = " quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'"
system(tmp.c_str());

Ответ 5

Системная функция требует const char *, а ваше выражение имеет тип std::string. Вы должны написать

string name = "john";
string system_str = " quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'";
system(system_str.c_str ());