考虑下面的设法类,方法A()包含两个lambda函数,a1()和a2()。我希望能够从a1内部调用a2。但是,当我这样做时,(a1中的第二行),我得到了错误
错误:无法隐式捕获变量“因为未指定默认捕获模式”
我不明白这条错误信息。我应该在这里捕捉到什么?我知道在lambda定义中使用 [this] 可以让我访问foo类中的方法,但是我不清楚如何做我想要的。
先谢谢你让我直截了当。
class foo
{
void A()
{
auto a2 = [this]() -> int
{
return 1;
};
auto a1 = [this]() -> int
{
int result;
result = a2();
return result;
};
int i = a1();
int j = a2();
}
};
答案 0 :(得分:8)
您需要捕获a2
才能在a2
的正文中使用a1
。简单地捕获this
不会捕获a2
;捕获this
只允许您使用封闭类的非静态成员。如果您希望默认捕获a2
,则需要指定=
或&
作为捕获默认值。
[this, &a2] // capture a2 by reference
[this, &] // capture all odr-used automatic local variables by reference, including a2