【发布时间】:2017-08-08 13:48:06
【问题描述】:
我有一个模板函数
template<typename It>
void Foo(It first, It second)
{
It third = first;
Bar(first, second, third);
}
调用另一个模板函数
template<typename It>
void Bar(It first,It second,It third)
{
for(It j= first + 2; j < second; j++)
{
third++;
}
}
当我用代码拨打Foo时
std::list<int> l{ 3, 8, 2, 5, 1, 4, 7, 6 };
Foo(l.begin(), l.end());
我收到几个关于该行的错误
for(It j= first + 2; j < second; j++)
在 Foo.第一条错误消息是
错误 C2784 'std::reverse_iterator<_ranit> std::operator +(reverse_iterator<_ranit>::difference_type,const std::reverse_iterator<_ranit> &)': 无法推导出模板参数 对于 'const std::reverse_iterator<_ranit> &' 来自 'int' 算法测试
要使代码 sn-p 工作,我必须进行哪些更改?
【问题讨论】:
-
你在编造一些东西。到目前为止,您发布的任何内容都不会带来反向迭代器。实际上,您正在做其他事情。这是什么?
-
@AnT 面对一个没有可行候选者的重载集,一些编译器会打印出通过名称查找找到的所有可能的重载以及它们不匹配的原因,包括完全不相关的重载。
标签: c++ c++11 templates visual-c++