5

g ++は好きではありません:

vector<int> x;
x += 1,2,3,4,5;

vector<string> y(x.size());
transform(x.begin(), x.end(), y.begin(), lexical_cast<string>);

エラーメッセージは次のとおりです。

error: no matching function for call to 'transform(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, <unresolved overloaded function type>)'

これは、変換する最後の引数としてlexical_castに問題があることを明確に示しています... lexical_castをラップする関数オブジェクトの記述を回避する方法はありますか?

ありがとう!

4

1 に答える 1

7

これはテストされていませんが、試すことができます:

transform(x.begin(), x.end(), y.begin(), lexical_cast<string, int>);

lexical_castは、2 つのテンプレート パラメータを持つテンプレートです。通常、2 つ目は引数からの型推定から推定されますが、引数を提供していないため、明示的に指定する必要があります。

于 2011-06-13T20:20:16.857 に答える