考虑下面的设法类,方法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();
}
};
Run Code Online (Sandbox Code Playgroud)
你需要捕获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
Run Code Online (Sandbox Code Playgroud)