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 回答