c++ - length - no se puede convertir ''std:: basic_string<char>'' a ''const char*'' para el argumento ''1'' a ''int system(const char*)''
string to char c++ (5)
Me sale este error: "operandos no válidos de los tipos ''const char *'' y ''const char [6]'' to binary ''operator +''" cuando intento compilar mi script. Aquí debería estar el error:
string name = "john";
system(" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename ''"+name+".jpg''");
Como muestran todas las demás respuestas, el problema es que agregar una std::string y const char* usando + da como resultado una 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());
El tipo de expresion
" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename ''"+name+".jpg''"
es std::string . Sin embargo el sistema de funciones tiene declaración
int system(const char *s);
es decir, acepta un argumnet de tipo const char *
No hay un operador de conversión que pueda convertir implícitamente un objeto de tipo std::string a objeto de tipo const char * .
Sin embargo, la clase 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 compilador que admita C ++ 11)
Para que puedas escribir
string name = "john";
system( (" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename ''"+name+".jpg''").c_str() );
No hay necesidad de usar una variable intermedia para la expresión.
La adición de una cadena literal con un std::string produce otro std::string . system espera un const char* . Puedes 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 ());
std::string + const char* da como resultado otro std::string . system no toma un std::string , y no puede concatenar char* ''s con el operador + . Si quieres usar el código de esta manera necesitarás:
std::string name = "john";
std::string tmp =
"quickscan.exe resolution 300 selectscanner jpg showui showprogress filename ''" +
name + ".jpg''";
system(tmp.c_str());