2014-02-05 22 views
13

Я получаю эту ошибку: "недопустимые операнды типов" const char * "и ' const char [6] 'в двоичный' operator + '", когда я пытаюсь скомпилировать свой скрипт. Здесь должна быть ошибка:не может преобразовать 'std :: basic_string <char>' в 'const char *' для аргумента '1' to 'int system (const char *)'

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

ответ

25

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

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

является std::string. Однако функция системы имеет декларацию

int system(const char *s); 

, что он принимает argumnet типа const char *

Там нет оператора преобразования, который будет преобразовывать неявно объект типа std::string объекта типа const char *.

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

Таким образом, вы можете написать

string name = "john"; 

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

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

9

std::string + const char* результаты в другом std::string. system не принимает 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*)

2

Добавление строкового литерала с std::string дает другой std::string. system ожидает 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()); 
1

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

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

Как показывают все другие ответы, проблема в том, что добавление std::string и 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()); 
Смежные вопросы