以下代码无法编译。该错误似乎是对合并例程的某种不明确的调用。我的理解是,STL 在 std 命名空间中找到了一个合并例程,但据我所知,下面代码中的名称 merge 应该是唯一的。
如果我将 merge 重命名为 xmerge,一切正常。问题可能是什么?名称冲突从何而来?
http://codepad.org/uAKciGy5 http://codepad.org/uAKciGy5
#include <iostream>
#include <iterator>
#include <vector>
template<typename InputIterator1,
typename InputIterator2,
typename OutputIterator>
void merge(const InputIterator1 begin1, const InputIterator1 end1,
const InputIterator2 begin2, const InputIterator2 end2,
OutputIterator out)
{
InputIterator1 itr1 = begin1;
InputIterator2 itr2 = begin2;
while ((itr1 != end1) && (itr2 != end2))
{
if (*itr1 < *itr2)
*out = *itr1, ++itr1;
else
*out = *itr2, ++itr2;
++out;
}
while (itr1 != end1) *out++ = *itr1++;
while (itr2 != end2) *out++ = *itr2++;
}
int main()
{
std::vector<int> l1;
std::vector<int> l2;
std::vector<int> merged_list;
merge(l1.begin(),l1.end(),
l2.begin(),l2.end(),
std::back_inserter(merged_list));
return 0;
}
编译器在你的merge
函数和std::merge
定义在algorithm
. Use ::merge
来消除这种歧义。这个调用是不明确的,因为编译器正在使用参数相关查找 http://en.wikipedia.org/wiki/Argument-dependent_name_lookup当使用非限定函数名称时搜索函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)