C++ 无法转换';标准::基本字符串<;char>';至';常量字符*';对于参数';1';至';int系统(常量字符*)&x27;

C++ 无法转换';标准::基本字符串<;char>';至';常量字符*';对于参数';1';至';int系统(常量字符*)&x27;,c++,string,char,system,C++,String,Char,System,当我试图编译脚本时,会出现以下错误:“将'const char*'和'const char[6]'类型的无效操作数转换为二进制'operator+'”。以下是错误: string name = "john"; system(" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'"); std::string+const char*会导致另一个std::strings

当我试图编译脚本时,会出现以下错误:“将'const char*'和'const char[6]'类型的无效操作数转换为二进制'operator+'”。以下是错误:

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

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());


请参见

将字符串文字与
std::string
相加将生成另一个
std::string
<代码>系统需要一个
常量字符*
。您可以使用
std::string::c_str()
进行以下操作:

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

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

正如所有其他答案所示,问题在于使用
+
添加
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());
表达方式

" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'"
std::string
。然而功能系统有声明

int system(const char *s);
也就是说,它接受类型为
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() );

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

尝试使用字符串串联

Statistics(string date)
    {
        this->date += date;
    }

实际上,这是一个类的一部分。

那么,也许可以解释一下它是如何工作的?