我收到此错误:“当我尝试编译脚本时,类型'const char *'和'const char [6]'到二进制'运算符+''的操作数无效。这应该是错误:
string name = "john";
system(" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'");
答案 0 :(得分:38)
表达的类型
" 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() );
无需为表达式使用中间变量。
答案 1 :(得分: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());
答案 2 :(得分:3)
添加带有std::string
的字符串文字会产生另一个std::string
。 system
需要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());
答案 3 :(得分:3)
正如所有其他答案所示,问题是使用std::string
添加const 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());
。但是,您也可以在没有临时的情况下执行此操作:
{{1}}
答案 4 :(得分:1)
系统函数需要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 ());
答案 5 :(得分:0)
尝试使用字符串串联
Statistics(string date)
{
this->date += date;
}
这实际上是课程的一部分。