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

问题描述 投票:0回答:6

我得到这个错误:“当我尝试编译我的脚本时,‘const char*’和‘const char [6]’类型的无效操作数到二进制‘operator+’”。这里应该是错误:

string name = "john";
system(" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'");
c++ string char system
6个回答
61
投票

表达方式

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

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


16
投票

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 operator+(const char*)


4
投票

添加带有

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

4
投票

正如所有其他答案所示,问题在于使用

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

2
投票

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

-1
投票

尝试使用字符串连接

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

acually 这是班级的一部分..

© www.soinside.com 2019 - 2024. All rights reserved.