1

テンプレートパラメータを受け取るヘルパー関数を定義したいと思います。このためのテンプレート関数を作成しようとしましたが、コンパイルされません。私が間違っていることについて何か考えはありますか?これが私が試したコードです。

// vectors are great, but lack a find method. Implement one as a helper.
template<class T> bool vec_find(vector<T> &v, T obj)
{
    vector<T>::iterator s;
    for (s = v.begin(); s < v.end(); s++)
    {
        if (*s == obj)
        {
            return true;
        }
    }
    return false;
}
4

1 に答える 1

1

おそらく、コンパイラが問題の内容を教えてくれました。私は言った:

test.cpp:7:5: error: need ‘typename’ before ‘std::vector<T>::iterator’ because ‘std::vector<T>’ is a dependent scope

したがって、それを修正するには、typename前に追加しますvector<T>::iterator

typename vector<T>::iterator s;
^^^^^^^^

一般に、型名のスコープがテンプレート パラメーターに依存する場合は常に必要です。テンプレートがインスタンス化されるまで、コンパイラは がどのvector<T>ように定義されるかを知りません。

vectorただし、 にメソッドがないのには十分な理由がありfindます。C++ ライブラリは、コンテナに作用するアルゴリズムからコンテナを分離しているため、任意のアルゴリズムが適切なシーケンスに作用できます。これに使用したいstd::find

return std::find(v.begin(), v.end(), obj) != v.end();
于 2012-06-15T17:41:03.060 に答える