为什么这个内部类没有编译?

yeg*_*256 0 c++

这是我的代码:

#include <algorithm>
class A {
  void f() {
    struct CompareMe {
      bool operator() (int i, int j) { return i < j; }
    } comp;
    int a[] = {1, 2, 3, 4};
    int found = std::min_element(a[0], a[3], comp);
  }
}
Run Code Online (Sandbox Code Playgroud)

错误信息:

no matching function for call to ‘min_element(int&, int&, A::f()::CompareMe&)

我究竟做错了什么?

sbi*_*sbi 5

该错误与您的内部类无关.STL算法适用于迭代器.进入ints 数组的迭代器是a int*.这些迭代器中的第二个必须总是指向一个传递范围的最后一个元素.

这个

int* found = std::min_element(&a[0], &a[4], comp);
Run Code Online (Sandbox Code Playgroud)

对我来说很好.

但是,据我所知,C++ 98不允许使用函数本地类类型实例化模板.除非C++ 03修正了它,否则它仍被禁止.(我认为C++ 11将允许它.)因此,为了完全符合当前的C++标准,您必须将比较器从函数中移出到类中.(该类或文件本地未命名的命名空间似乎是将其移动到哪里的良好候选者.)