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

时间:2014-02-05 21:54:13

标签: c++ string char system

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

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

6 个答案:

答案 0 :(得分:38)

表达的类型

" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'"

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

int system(const char *s);

即它接受const char *

类型的argumnet

没有转化运算符可以隐式地将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::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*)

答案 2 :(得分:3)

添加带有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());

答案 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;
    }

这实际上是课程的一部分。