我想定义一个带有模板参数的辅助函数。我试过为它做一个模板化的函数,但是它没有编译。知道我做错了什么吗?这是我试过的代码。
// 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;
}
答案 0 :(得分: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();