lambda 函数中的变量显示垃圾值
Variable inside lambda function is showing garbage value
我在Cocos2d X游戏中使用这种方法。
void OpponentNode::discard(int cardNum)
{
log("nOpponentNode::discard <%d>n", cardNum);
for (int i = 0; i < vecOpponentHand.size(); i++)
{
if (vecOpponentHand.at(i) == cardNum)
{
vecOpponentHand.erase(vecOpponentHand.begin() + i);
break;
}
}
CardSprite * discardedCard;
for (int i = 0; i < vecOpponentCards.size(); i++)
{
if (vecOpponentCards.at(i)->getTag() == cardNum)
{
discardedCard = vecOpponentCards.at(i);
vecOpponentCards.erase(vecOpponentCards.begin() + i);
break;
}
}
log("nOpponentNode::discard <%d>n", cardNum);
discardedCard->makeFaceUp();
RotateTo * rotate = RotateTo::create(0.4 * SPEED_MULTIPLIER, 0);
MoveTo * move = MoveTo::create(0.4 * SPEED_MULTIPLIER,
origin + Vec2(visibleSize.width * 0.75, visibleSize.height * 0.6));
Spawn * spawn = Spawn::create(rotate, move, NULL);
CallFunc * callFunc = CallFunc::create(
[&]()
{
log("nOpponentNode::discard <%d>n", cardNum); //this one shows garbage/different value
if (delegate)
{
delegate->opponentNodeDidFinishDiscard(this, cardNum);
}
this->removeChild(discardedCard);
});
discardedCard->runAction(Sequence::create(spawn, callFunc, NULL));
log("nOpponentNode::discard <%d>n", cardNum);
}
奇怪的是,当我像上面一样记录整数卡数字时,我得到的值与 lambda 函数内的日志不同。例如,我从顶部 2 个日志和最底部的日志中得到"RivalNode::d iscard <402>",但从 lambda 函数内的日志中得到"RivalNode::d iscard <64>"。
其他要点:
- lambda 块最后执行。
- 我主要获得像 64 这样的值或像 -15493456 这样的垃圾值。
我的猜测是整数卡在执行之前被释放。谁能指出我正确的方向?
您正在捕获对 cardNum
参数的引用。我认为您想按价值捕获它。
我不清楚delegate
是什么。假设它是一个类成员,那么我认为你只需要[this, discardedCard, cardNum]
.你可以缩写为[=]
,尽管我认为明确的更清楚。
相关文章:
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- 为什么我的双变量通过添加 c++ 显示 nan?
- 类中的一个变量显示,但另一个不显示
- 变量在循环中显示,但不在循环中显示
- 显示 C++ 中"anonymous"变量创建的警告
- gdb映射显示不正确的成员变量
- 使用 while 循环显示顺序变量的值
- Intellisense未显示变量
- 在每次迭代中显示变量
- 无法在受保护的类中显示变量
- C++:显示变量
- 如何在C++中显示变量
- 强制编译器显示变量的类型
- C++生成器 XE 2 -- 如何在 TEdit 控件中显示变量数据
- 如何使用DrawText()来显示变量
- 使控制台标题栏显示变量的值
- c++矢量错误,显示变量有歧义-我已经尝试了一切仍然没有希望
- 使用c++获取当前运行进程中的X显示变量
- 显示变量消息的自定义异常,不同编译器中的行为不同
- 在呈现文本C++时显示变量SDL_TTF