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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用带数组的find_if()时代码段出错相关的知识,希望对你有一定的参考价值。

这是我的代码片段:

#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 *,)'的匹配函数

template _IIter std :: find_if(_IIter,_IIter,_Predicate)

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

无法推断模板参数'_Predicate'

答案

您是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)

以上是关于使用带数组的find_if()时代码段出错的主要内容,如果未能解决你的问题,请参考以下文章

为啥像这样使用 find_if 会失败?

使用片段从数据库 SQLite 获取数据时出错

Android:在drawerlayout中使用地图膨胀片段时出错

在我的“设置”片段中膨胀类 PreferenceScreen 时出错

当我映射和展平数组时,TypeScript 错误地出错?

带数组的 TableView (Objective-C)