C++ 使用模板进行参数转换时出错
我有一个函数模板,它接受一个向量和一个给定类型的元素,并返回元素在向量中的位置。这是此函数模板的代码:C++ 使用模板进行参数转换时出错,c++,templates,C++,Templates,我有一个函数模板,它接受一个向量和一个给定类型的元素,并返回元素在向量中的位置。这是此函数模板的代码: 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; }
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(intVec, ele)
我没有得到任何错误
这种行为的原因是什么?似乎编译器无法将
向量
转换为向量
。从逻辑上讲,intVec
是int的向量,不是吗?你说编译器,你想要双倍的向量。
您无法将
向量
转换为向量
,因为向量
没有后续的转换构造函数
,这很好。似乎编译器无法将向量
转换为向量
。从逻辑上讲,intVec
是int的向量,不是吗?你说编译器,你想要双倍的向量。
无法将
向量
转换为向量
,因为向量
没有以下转换构造函数
,很好。什么类型的intVec
和ele
?intVec和ele都是int类型。但我希望编译器在实例化模板函数时将它们视为双重类型。@RakeshK为什么?将它们视为双精度不会改变findElement
的功能。intVec
和ele
的类型是什么?intVec和ele都是int类型。但我希望编译器在实例化模板函数时将它们视为双精度。@RakeshK为什么?将他们视为替身不会改变findElement
的作用。
error C2664: 'findElement' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'const std::vector<_Ty,_Ax> &'
error C2664: 'findElement' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'std::vector<_Ty,_Ax> &'
findElement(intVec, ele)