J'obtiens cette erreur: "opérandes invalides des types 'const char *' et 'const char [6]' en binaire 'operator +'" quand j'essaye de compiler mon script. Voici l'erreur:
string name = "john";
system(" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'");
Le type d'expression
" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'"
est std::string
. Cependant le système de fonction a une déclaration
int system(const char *s);
c'est-à-dire qu'il accepte un argumentaire de type const char *
Aucun opérateur de conversion ne convertirait implicitement un objet de type std::string
En objet de type const char *
.
Néanmoins, la classe std::string
A deux fonctions qui effectuent cette conversion explicitement. Ce sont c_str()
et data()
(le dernier ne peut être utilisé qu'avec un compilateur qui prend en charge C++ 11)
Vous pouvez donc écrire
string name = "john";
system( (" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'").c_str() );
Il n'est pas nécessaire d'utiliser une variable intermédiaire pour l'expression.
std::string + const char*
entraîne un autre std::string
. system
ne prend pas de std::string
, et vous ne pouvez pas concaténer char*
est avec le +
opérateur. Si vous souhaitez utiliser le code de cette façon, vous aurez besoin de:
std::string name = "john";
std::string tmp =
"quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '" +
name + ".jpg'";
system(tmp.c_str());
Comme le montrent toutes les autres réponses, le problème est que l'ajout d'un std::string
Et d'un const char*
En utilisant +
Donne un std::string
, Tandis que system()
attend un const char*
. Et la solution est d'utiliser c_str()
. Cependant, vous pouvez également le faire sans temporaire:
string name = "john";
system((" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'").c_str());
L'ajout d'un littéral de chaîne avec un std::string
Produit un autre std::string
. system
attend un const char*
. Vous pouvez utiliser std::string::c_str()
pour cela:
string name = "john";
string tmp = " quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'"
system(tmp.c_str());
La fonction système nécessite const char *, et votre expression est du type std::string
. Tu devrais écrire
string name = "john";
string system_str = " quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'";
system(system_str.c_str ());