c++ 错误“无法将参数”1“的”std::basic_string“转换< char>为”const char*“,转换为”int system(const char* int)“”

bgtovc5b  于 11个月前  发布在  其他
关注(0)|答案(5)|浏览(179)

我得到这个错误:“invalid operators of types 'const char*' and 'const char [6]' to binary 'operator +'”when I try to compile my script.这里应该是错误:

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

字符串

pengsaosao

pengsaosao1#

表达式的类型

" 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()(最后一个只能在支持C++11的编译器上使用)
所以你可以写

string name = "john";

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


不需要为表达式使用中间变量。

abithluo

abithluo2#

std::string + const char*会导致另一个std::stringsystem不接受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*)

pftdvrlh

pftdvrlh3#

将字符串文字与std::string相加会产生另一个std::stringsystem需要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());

字符串

hec6srdp

hec6srdp4#

正如所有其他答案所显示的,问题在于使用+添加std::stringconst 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());

字符串

44u64gxh

44u64gxh5#

系统函数需要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 ());

字符串

相关问题