将迭代器作为参数传递时无匹配的函数调用
No matching function call when passing iterators as arguments
我想创建一个sum()函数来计算stl容器的总和。该函数使用迭代器类型的模板参数,并接受两个迭代器作为参数如下:
template <typename T>
double Sum(typename T::const_iterator start, typename T::const_iterator end)
{
typename T::const_iterator i3;
double sum2=0.0;
for (i3=start; i3 != end; ++i3)
{
sum2 += (i3);
}
return sum2;
}
,在main()中,我称之为:
vector<double>::const_iterator vec_start=myvector.begin();
vector<double>::const_iterator vec_end=myvector.end();
cout<<"The sum of the vector is "<<Sum(vec_start, vec_end)<<endl;
,但它说没有匹配函数要求sum()。我阅读了一些讨论,这是因为功能签名是T,但是我通过迭代器,并且需要在传递迭代参数之前指定数据类型。
正如您发现的讨论所说的那样,由于未分制的上下文,模板参数T
不能自动推导,因此您需要明确指定它。例如
cout << "The sum of the vector is " << Sum<vector<double>>(vec_start, vec_end) << endl;
// ~~~~~~~~~~~~~~~~
但是您无需这样做,实际上,您可以将Sum
的声明更改为:
template <typename I>
double Sum(I start, I end)
{
I i3;
double sum2=0.0;
for (i3=start; i3 != end; ++i3)
{
sum2 += *i3;
}
return sum2;
}
I
可以推导,然后最初使用它作为
cout << "The sum of the vector is " << Sum(vec_start, vec_end) << endl;
相关文章:
- Rcpp并行无匹配函数,用于调用"转换"
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- 无匹配函数呼叫getline()
- C 线程 - 无匹配函数供呼叫
- 错误代码:无匹配函数供呼叫
- 子类/超类的"无匹配函数调用"
- 没有匹配函数调用 std::forward(const std::string &) 与可变参数
- 无匹配函数呼叫
- 与(C )无匹配函数
- 无匹配函数呼叫
- 没有匹配函数调用 FMOD::Studio::System::setListenerAttributes()
- 无匹配函数呼叫(类,C )
- C 11无匹配函数,可以呼叫'std :: vector
- 对矢量对:无匹配函数
- C 在较旧的JSON :: NLOHMANN库中使用push_back时无匹配函数
- std::查找"错误无匹配函数"
- C 错误无匹配函数
- C :Tusing Boost Unordered_map错误:无匹配函数调用
- C++、命名空间、模板和无匹配函数调用
- 错误:没有匹配函数调用"min(长期无符号 int&,无符号 int&)"