1

我正在尝试了解 find_if 函数的工作原理,并且我正在遵循此参考中的示例:

http://www.cplusplus.com/reference/algorithm/find_if/

当我遵循上述参考中给出的示例时,这意味着当我使用 main() 时,一切正常。但是当我尝试将该示例包含在一个类中时(如下所示),我在编译时收到此错误:

error: argument of type ‘bool (A::)(int)’ does not match ‘bool (A::*)(int)’

在我的课堂上:

 bool A::IsOdd (int i) {
  return ((i%2)==1);
}


void A::function(){
   std::vector<int> myvector;

   myvector.push_back(10);
   myvector.push_back(25);
   myvector.push_back(40);
   myvector.push_back(55);

   std::vector<int>::iterator it = std::find_if (myvector.begin(), myvector.end(), IsOdd);
   std::cout << "The first odd value is " << *it << '\n';
  }

谁能帮我理解为什么会这样?

4

1 回答 1

5

A::isOdd需要一种static方法。否则只能与特定的A. 由于isOdd根本不依赖于成员字段,因此可以将其更改为static方法。更重要的是,由于它根本不依赖于类,您可以创建一个全局isOdd

bool isOdd(int i){
    return i % 2;
}

编辑:正如克里斯所建议的,您还可以使用简单的 lambda (C++11):

auto it = std::find_if (
     myvector.begin(), 
     myvector.end(),
     [](int i) -> bool{ return i % 2; }
);
于 2013-03-02T18:35:26.133 回答