4

エディターで次のコードを書きますが、コンパイルできず、警告が表示されます。

cannot convert 'std::basic_string<char, std::char_traits<char>, 
std::allocator<char> to 'const char*' in assignment|
||=== Build finished: 1 errors, 0 warnings ===|

コード:

#include <iostream>
//#inclide <algorithm>
#include <numeric>
#include <vector>

using namespace std;

int main()
{

    std::vector<std::string> v;
    v.push_back(string("a"));
    v.push_back(string("b"));
    v.push_back(string("c"));

    string num = accumulate(v.begin(),v.end(),"");

    std::cout << num;

    return 0;
}

コンパイルできない理由がわかりません。誰か助けてください。ありがとう:)

4

4 に答える 4

4

のテンプレート パラメーターの 1 つは、std::accumulate関数の 3 番目の引数から推定される戻り値の型です。これは、入力反復子範囲内の値を累積できる型でもあります。あなたの場合、戻り値の型は である必要がありstd::stringますが、 を渡してい""ますconst char[2]。コピーして蓄積できるタイプではありません。

を渡すことでこれを修正できますstd::string

string num = accumulate(v.begin(),v.end(), std::string());
于 2013-05-31T10:11:09.637 に答える
1

""3 番目の引数としてではなく、明示的に次のように呼び出しstd::string()ます。

string num = accumulate(v.begin(),v.end(),std::string());
于 2013-05-31T10:08:46.837 に答える
0

の戻り値の型std::accumulateは、3 番目のパラメーターの型と同じです。これはconst char*、あなたの場合に推測されます (文字列リテラルを渡しているため)。

これは、関数const char*が内部で s を使用することを想定しているが、反復子の範囲にstd::strings が含まれているため、barfs を実行することを意味します。std::stringそのため、3 番目の引数に正しい型 ( ) を渡す必要があります。

string num = accumulate(v.begin(), v.end(), std::string());
于 2013-05-31T10:13:01.720 に答える