【发布时间】:2020-05-18 19:25:30
【问题描述】:
我正在尝试在一个类中声明一个 lambda 比较函数:
class Solve {
private:
int n, q, first[N+1], depth[N+1], seg[_log(N)+2][(N<<1)+1];
vector <int> G[N+1], euler;
auto cmp = [euler, depth] (const int &a, const int &b) -> bool {
return depth[euler[a]] < depth[euler[b]];
};
...
但得到错误:error: non-static data member declared with placeholder 'auto'
将函数声明为静态无济于事:error: capture of non-variable 'Solve::euler' + 一堆其他错误。
显式使用 std::function 也没有解决它。
该函数旨在用于min(a, b, cmp);
非常感谢任何帮助!
【问题讨论】:
-
您能否发布一个不依赖于编译器扩展的minimal reproducible example,以便我复制/粘贴并使用我的 SO(偏执)设置进行编译?
-
当然:pastebin.com/RxRiyy4d 如果您要获取整个代码,就是这样,但其中很多很可能是无用的:pastebin.com/CV1RJPLi 我的编译器选项是 -Wall -O2 -std =c++11。除此之外,没有进行任何更改。谢谢!
-
我认为使用 auto 需要用 c++14 编译的函数。
-
您不能将临时函数对象放在类定义中。这与 lambda 的意义相矛盾。您可以改用生成器方法,它返回一个 lambda。
-
只是一个成员函数。为什么需要以这种方式声明成员函数?而且您正在按价值捕获成员。