0

我正在使用g++ 4.7

我想做的是这个,

find_if(s.begin(), s.end(), isalnum);

whereisalnum定义在cctype并且s是一个字符串。

logman.cpp:68:47: error: no matching function for call to ‘find_if(std::basic_string<char>::const_iterator, std::basic_string<char>::const_iterator, <unresolved overloaded function type>)’

然而,这行得通,

bool my_isalnum(int c) {
    return isalnum(c);
}

find_if(s.begin(), s.end(), my_isalnum);

如何在不创建自己的函数的情况下使其工作?

4

3 回答 3

8

编译器在消除此函数此函数之间的歧义时遇到了问题。您想要第一个,并且必须通过使用强制转换指定签名来帮助编译器:

find_if(s.begin(), s.end(), (int(*)(int))isalnum);
于 2012-11-07T03:02:00.447 回答
2

这应该有效。

#include <algorithm>
#include <cctype>
auto result = std::find_if (begin(s), end(s), std::isalnum);
于 2017-05-08T15:52:18.597 回答
0

这应该工作

#include <algorithm >
#include <cctype>

auto result = std::find_if(std::begin(s), std::end(s),  isalnum) ;
于 2019-06-01T19:51:44.257 回答