我有一个函数模板,它接受一个向量和给定类型的元素,并返回向量中元素的位置。这是此功能模板的代码:
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)
我没有收到任何错误。
这种行为的原因是什么?
答案 0 :(得分:3)
似乎编译器无法将vector<double>
转换为vector<int>
。因为按逻辑方式,intVec
是整数的向量,不是吗?你说编译器,你想要vector
双打。
您无法将vector<T>
转换为vector<U>
,因为vector
没有关注conversion constructor
,而且很不错。