我正在尝试对攻击 vector 进行 foreach,每次攻击都有一个唯一 ID,例如 1-3。
类方法接受1-3的键盘输入。
我正在尝试使用 foreach 来遍历我在 m_attack 中的元素,以查看数字是否匹配,如果匹配...做点什么。
我看到的问题是这样的:
a'for each' statement cannot operate on an expression of type "std::vector<Attack
我是不是完全错了,我有 C# 经验并且是我的基础,任何帮助将不胜感激。
我的代码如下:
在标题中
vector<Attack> m_attack;
在类里面
int Player::useAttack (int input)
{
for each (Attack* attack in m_attack) // Problem part
{
//Psuedo for following action
if (attack->m_num == input)
{
//For the found attack, do it's damage
attack->makeDamage();
}
}
}
最佳答案
接下来的示例假设您使用 C++11。 基于范围的 for 循环示例:
for (auto &attack : m_attack) // access by reference to avoid copying
{
if (attack.m_num == input)
{
attack.makeDamage();
}
}
您应该根据 makeDamage()
的行为使用 const auto &attack
。
您可以使用标准库中的 std::for_each
+ lambdas:
std::for_each(m_attack.begin(), m_attack.end(),
[](Attack * attack)
{
if (attack->m_num == input)
{
attack->makeDamage();
}
}
);
如果你不习惯使用 std::for_each
,你可以使用迭代器循环 m_attack
:
for (auto attack = m_attack.begin(); attack != m_attack.end(); ++attack)
{
if (attack->m_num == input)
{
attack->makeDamage();
}
}
使用 m_attack.cbegin()
和 m_attack.cend()
获取 const
迭代器。
关于每个 C++,从 vector 元素中提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15027282/