no se puede convertir ‘std :: basic_string ‘ en ‘const char *’ para el argumento ‘1’ en ‘int system (const char *)’

Me sale este error: “operandos inválidos de tipos ‘const char *’ y ‘const char [6]’ a binario ‘operator +'” cuando bash comstackr mi script. Aquí debería estar el error:

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

El tipo de expresión

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

es std::string . Sin embargo, el sistema de función tiene statement

 int system(const char *s); 

es decir, acepta una argumnet de tipo const char *

No hay un operador de conversión que convierta implícitamente un objeto de tipo std::string en objeto de tipo const char * .

Sin embargo, class std::string tiene dos funciones que hacen esta conversión explícitamente. Son c_str() y data() (el último solo se puede usar con un comstackdor que admita C ++ 11)

Entonces puedes escribir

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

No es necesario usar una variable intermedia para la expresión.

std::string + const char* da como resultado otra std::string . system no toma std::string , y no puede concatenar char* con el operador + . Si desea usar el código de esta manera, necesitará:

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

Ver std :: string operator + (const char *)

Como muestran todas las otras respuestas, el problema es que al agregar una std::string y una const char* usando + resulta en std::string , mientras que system() espera una const char* . Y la solución es usar c_str() . Sin embargo, también puedes hacerlo sin un temporal:

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

La adición de un literal de cadena con std::string produce otra std::string . system espera un const char* . Puede usar std::string::c_str() para eso:

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

La función del sistema requiere const char *, y su expresión es del tipo std::string . Deberías escribir

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