コンパイルエラーが発生するコードは次のとおりです。私はこれがC++で機能しているはずだと思った。 ここで何が間違っているのか理解できる人は誰でも助けてくれますか?stlコンテナを入力とする関数テンプレート
template < typename elem_type>
elem_type *find2(std::vector<elem_type>& vec, elem_type value) {
for (int i = 0; i < vec.size(); ++i) {
if (vec[i] == value) {
return &vec[i];
}
}
return 0;
}
int main(int argc, char **argv) {
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
std::vector<int> vec(arr, arr+10);
int value = 9;
int *ptr1 = find2(vec,value);
}
1> d:\personal\work\find\find\find.cpp(25) : see reference to function template instantiation 'elem_type *find2<int>(std::vector<_Ty> &,elem_type &)' being compiled
1> with
1> [
1> elem_type=int,
1> _Ty=int
1> ]
コンパイラはあなたが符号なしに署名したint
変数i
を比較している。このラインでVisual Studio 11
なぜ完全なエラーメッセージを投稿しないのですか? –
あなたは 'std :: find(arr、arr + 10、9)'を使うことができることを知っていますか? –
私はg ++でコードをコンパイルしましたが、エラーなしでコンパイルしました。私は "#"を追加しました。 "std :: cout << * ptr1 << std :: endl;を追加すると正解を出力します。だからあなたのコンパイラ? –
Avi