C 代表每个,从向量元素中提取

新手上路,请多包涵

我正在尝试对攻击向量进行 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();
        }
    }
}

原文由 Springfox 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 439
2 个回答

对于下一个示例,假设您使用 C++11。基于范围的 for 循环示例:

 for (auto &attack : m_attack) // access by reference to avoid copying
{
    if (attack.m_num == input)
    {
        attack.makeDamage();
    }
}

您应该使用 const auto &attack 取决于 makeDamage() 的行为。

您可以使用标准库 + lambdas 中的 std::for_each

 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 迭代器。

原文由 user425495 发布,翻译遵循 CC BY-SA 4.0 许可协议

C++ 在其语法中没有 for_each 循环功能。您必须使用 c++11 或使用模板函数 std::for_each

 struct Function {
    int input;
    Function(int input): input(input) {}
    void operator()(Attack& attack) {
        if(attack->m_num == input) attack->makeDamage();
    }
};
Function f(input);
std::for_each(m_attack.begin(), m_attack.end(), f);

原文由 andre 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题