不能将'std :: basic_string <char>'转换为'const char*'以将参数'1'转换为'int system(const char*)'

Gia*_*one 21 c++ string system char

我得到这个错误:"当我尝试编译我的脚本时,类型'const char*'和'const char [6]'到二进制'运算符+''的操作数无效.这应该是错误:

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

Vla*_*cow 42

表达的类型

" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'"
Run Code Online (Sandbox Code Playgroud)

std::string.但是功能系统有声明

int system(const char *s);
Run Code Online (Sandbox Code Playgroud)

也就是说它接受了类型的argumnet const char *

没有转换运算符可以隐式地将类型的对象转换为类型std::string的对象const char *.

尽管如此,class std::string有两个明确执行此转换的函数.它们是c_str()data()(最后一个只能用于支持C++ 11的编译器)

所以你可以写

string name = "john";

system( (" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'").c_str() );
Run Code Online (Sandbox Code Playgroud)

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


Ed *_* S. 10

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());
Run Code Online (Sandbox Code Playgroud)

请参见std :: string operator +(const char*)