Не может преобразовать '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'");
Ответы
Ответ 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 ());