使用带数组的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()时代码段出错的主要内容,如果未能解决你的问题,请参考以下文章
Android:在drawerlayout中使用地图膨胀片段时出错