0

我有一个函数模板,它接受一个向量和一个给定类型的元素,并返回该元素在向量中的位置。这是此函数模板的代码:

template<class T>
int findElement(const vector<T> &vec, const T &ele)
{
    for(size_t i = 0; i < vec.size(); i++)
    {
        if(ele == vec[i])
            return i;
    }
    return -1;
}

这是函数调用:

findElement<double>(intVec, ele);

但是当我调用该函数时出现此错误:

error C2664: 'findElement' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'const std::vector<_Ty,_Ax> &'

即使我删除const了函数模板定义中的向量,这个错误也是一样的:

error C2664: 'findElement' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'std::vector<_Ty,_Ax> &'

但是,当我将函数调用为

findElement(intVec, ele)

我没有收到任何错误。

这种行为的原因是什么?

4

1 回答 1

3

似乎编译器无法转换vector<double>vector<int>. 因为从逻辑intVec上讲,是整数向量,不是吗?你说编译器,你想要vector双打。您无法转换vector<T>vector<U>,因为vector没有追随者conversion constructor,这很好。

于 2013-04-24T05:37:55.153 回答