为什么我的重载函数调用不明确?

时间:2020-09-21 18:11:22

标签: c++ templates

我正在阅读Essential C ++一书,并尝试其中的一些示例。应该从第3章的以下代码开始工作。

#include <iostream>
#include <iterator>
#include <algorithm>
#include <string>

using namespace std;

template <typename IteratorType, typename elemType>
IteratorType find(IteratorType first, IteratorType last, const elemType &value)
{
    for (; first != last; ++first)
        if (value == *first)
            return first;
    return last;
};

int main()
{
    int asize = 8;
    int ia[asize] = {1, 1, 2, 3, 5, 8, 13, 21};
    
    int *pia = find(ia, ia + asize, 1024);
    if (pia != ia + asize)
        cout<<"found in array"<<endl;
    else
    {
        cout<<"not found in array"<<endl;
    }
    
    return 0;
}

但是,它显示了错误

重载的“ find(int [asize],int *,int)”的调用含糊不清

然后我替换了

int *pia = find(ia, ia + asize, 1024);

使用

int *pia = find(&ia[0], ia + asize, 1024);

现在显示错误

对重载的“ find(int *,int *,int)”的调用含糊不清

我正在使用Ubuntu 18.04和G ++ 7.5.0。

如果有人能让我知道正确的实现方式,我将不胜感激。

0 个答案:

没有答案