将迭代器传递给函数

时间:2017-10-14 02:34:35

标签: c++ vector iterator

我有以下代码用于从向量中找到最弱的目标,该向量是包含指向所有活动单位的指针的向量。我正在尝试创建一个迭代器,它将遍历每个单元并将其传递给另一个名为can_attack(Unit& u,Unit& v)的函数,该函数需要两个单位并测量它们是否足够接近以进行攻击。 / p>

在编译时我收到以下错误“错误:类型'const Unit'的引用无法绑定到'Unit * const'类型的左值”。我知道我传递了错误类型的变量但不确定如何将迭代器转换为const单元。谢谢你的帮助

void World::enemies_within_attack_range(const Unit &u,
                                    vector<Unit*> &targets) const
{
  targets.clear();
  vector<Unit*>::const_iterator it=units.begin();
  for(it;it!=units.end();it++){
    if((*it)->team != u.team){
        if(can_attack(u,(*it))){
            targets.push_back(*it);
        }
     }
  }

}

1 个答案:

答案 0 :(得分:0)

问题在于can_attack调用和参数const Unit&amp; u。 这个电话必须按照songyuanyao提到的那样纠正:can_attack(你,*(* it))。 但这不是唯一的问题。 有三种选择:

  1. 而不是const Unit&amp; u,将你声明为Unit&amp; U;
  2. 而不是can_attack(Unit&amp; u,Unit&amp; v),如果可能,将其声明为can_attack(const Unit&amp; u,Unit&amp; v);
  3. (这可能是最糟糕的选择)使用调用can_attack(const_cast&lt; Unit&amp;&gt;(u),*(* it))。
  4. 选择权在你手中。