当我创建一个按钮列表并为其添加addTouchEventListener时,如下面的代码
for (int i = 0; i < btmPlay.size(); i++ )
{
btmPlay.at(i)->addTouchEventListener([&](Ref *sender, ui::Widget::TouchEventType type){
if (type == ui::Widget::TouchEventType::ENDED)
{
CCLOG("%i", i);
}
});
}
当我触摸第一个按钮时,结果是12(btmPlay.size()= 13)。
有什么错误?
答案 0 :(得分:0)
在你的闭包中,你通过引用捕获变量i
,这就是为什么点击任何按钮将打印相同的值,在这种情况下为12.如果相反,你捕获变量{{1} }按值(通过用i
替换[&]
),然后每个按钮将打印0-12范围内的不同值。
顺便说一句,在你的例子中通过引用捕获[=]
也是错误的,因为在调用闭包时,变量已经超出范围,并且打印它是UB。