web-dev-qa-db-ja.com

引数 '1'から 'int system(const char *)'の 'std :: basic_string <char>'を 'const char *'に変換できません

スクリプトをコンパイルしようとすると、「タイプ 'const char *'および 'const char [6]'からバイナリ 'operator +'への無効なオペランド」というエラーが表示されます。エラーは次のとおりです。

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

式のタイプ

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

式に中間変数を使用する必要はありません。

42

std::string + const char*は別のstd::stringになります。 systemstd::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 *) を参照してください

10
Ed S.

他のすべての答えが示すように、問題は_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());
_
3
Angew

_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());
_
3
juanchopanza

システム関数には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
Alex Telishev