[英]error: cannot convert 'std::basic_string<char>::iterator ...' to 'const char* for argument '1' ...'
[英]cannot convert 'std::basic_string<char>' to 'const char*' for argument '1' to 'int system(const char*)'
當我嘗試編譯我的腳本時,我收到此錯誤:“類型為 'const char*' 和 'const char [6]' 的無效操作數到二進制 'operator+'”。 這里應該是錯誤:
string name = "john";
system(" quickscan.exe resolution 300 selectscanner jpg showui showprogress filename '"+name+".jpg'");
表達的類型
" 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() );
不需要為表達式使用中間變量。
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
。 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());
正如所有其他答案所示,問題在於使用+
添加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());
system 函數需要 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 ());
嘗試使用字符串連接
Statistics(string date)
{
this->date += date;
}
acually 這是一個類的一部分..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.