スクリプトをコンパイルしようとすると、「タイプ '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
_には、この変換を明示的に行う2つの関数があります。それらは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 operator +(const char *) を参照してください
他のすべての答えが示すように、問題は_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());
_
_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());
_
システム関数には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 ());