C++ 声明使用模板参数的函数

C++ 声明使用模板参数的函数,c++,templates,C++,Templates,我想定义一个接受模板参数的助手函数。我曾尝试为此创建一个模板函数,但它无法编译。知道我做错了什么吗?这是我试过的代码 // 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

我想定义一个接受模板参数的助手函数。我曾尝试为此创建一个模板函数,但它无法编译。知道我做错了什么吗?这是我试过的代码

// 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;
}
//向量很好,但缺少find方法。实现一个作为助手。
模板布尔向量查找(向量&v,T对象)
{
向量::迭代器s;
对于(s=v.begin();s
大概是编译器告诉了您问题所在。我的朋友说:

test.cpp:7:5: error: need ‘typename’ before ‘std::vector<T>::iterator’ because ‘std::vector<T>’ is a dependent scope
通常,只要类型名称的范围依赖于模板参数,就需要这样做;在模板被实例化之前,编译器不知道如何定义
vector
,因此需要被告知在模板内的名称范围是指一个类型,而不是其他类型

<>但是,有一个很好的原因,为什么<代码>向量<代码>没有<代码>查找< /> >方法:C++库将容器与作用于它们的算法分开,从而任何算法都可以按任何合适的顺序运行。您要使用
std::find
来执行以下操作:

return std::find(v.begin(), v.end(), obj) != v.end();

你的编译器大概告诉了你问题所在。我的朋友说:

test.cpp:7:5: error: need ‘typename’ before ‘std::vector<T>::iterator’ because ‘std::vector<T>’ is a dependent scope
通常,只要类型名称的范围依赖于模板参数,就需要这样做;在模板被实例化之前,编译器不知道如何定义
vector
,因此需要被告知在模板内的名称范围是指一个类型,而不是其他类型

<>但是,有一个很好的原因,为什么<代码>向量<代码>没有<代码>查找< /> >方法:C++库将容器与作用于它们的算法分开,从而任何算法都可以按任何合适的顺序运行。您要使用
std::find
来执行以下操作:

return std::find(v.begin(), v.end(), obj) != v.end();

你把它放在头文件里了吗?编译器错误是什么?使用
std::find
。我想在
vector::iterator
之前需要一个
typename
。此外,决不能将
s
与迭代器一起使用。对于存储连续的向量,它可能工作得很好,但当您移动到类似于
std::list
的位置时,您将得到意外的结果。更好的是,您可以使用ranged for或
std::for each
。或者,在对向量进行排序时,您可以使用
std::binary\u search
。可能的重复项您是否将其放在头文件中?编译器错误是什么?使用
std::find
。我想在
vector::iterator
之前需要一个
typename
。此外,决不能将
s
与迭代器一起使用。对于存储连续的向量,它可能工作得很好,但当您移动到类似于
std::list
的位置时,您将得到意外的结果。更好的是,你可以使用ranged for或
std::for each
。或者你可以在向量排序时使用
std::binary\u search
。可能是重复的我刚刚意识到OP从未说过问题在函数头中。不管出于什么原因,我想他们会的:汉克斯!std::find()是一个很好的解决方案。我刚刚意识到OP从未说过问题出在函数头中。不管出于什么原因,我想他们会的:汉克斯!std::find()是一个很好的解决方案。