使用带数组的find_if()时代码段出错

时间:2018-03-05 11:09:16

标签: c++ stl

这是我的代码段:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;


bool next(int j)
{
    return(j<3);
}

int main()
{
    ......
    cin>>m;
    int h[m];
    memset(h, 0, sizeof(h));
    .......

    int *p;
    p = find_if(h, h+m, next);
    ......
}

我在编译时遇到以下错误:

  

没有用于调用'find_if(int *,int *,)'

的匹配函数      

模板_IIter std :: find_if(_IIter,_IIter,_Predicate)

     

模板参数扣除/替换失败:

     

无法推断模板参数'_Predicate'

1 个答案:

答案 0 :(得分:5)

你是C ++有些神秘的查找规则的受害者!

因为您没有符合next的条件,并且因为您撰写了using namespace std,并且因为std::next存在,the compiler considers std::next a candidate (even though the lookup then fails) and nothing else

使您的职能合格:

find_if(h, h+m, ::next);
//              ^^

代表您的代码的测试用例:

#include <algorithm>
using namespace std;

bool next(int j)
{
    return (j<3);
}

int main()
{
    int h[5] = {};
    const size_t m = 2;
    find_if(h, h+m, next);
}

live demo

并修复:

#include <algorithm>
using namespace std;

bool next(int j)
{
    return (j<3);
}

int main()
{
    int h[5] = {};
    const size_t m = 2;
    find_if(h, h+m, ::next);
}

live demo