将迭代器传递到函数中

Passing iterator into function

本文关键字:函数 迭代器      更新时间:2023-10-16

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

在编译时,我收到以下错误"错误:对类型'const Unit'的引用无法绑定到类型为'单位*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);
        }
     }
  }
}

问题出在can_attack调用和参数常量单位 &u。电话必须更正,如松元尧提到的:can_attack(u,*(*it))。但这不是唯一的问题。有三个选项:

  1. 而不是常量单位和u,将u声明为单位和u;
  2. 如果可能,请将其声明为 can_attack(const Unit &u, Unit &v),而不是 can_attack(Unit &u, Unit &v);
  3. (这可能是最糟糕的选择)使用call can_attack(const_cast <Unit&amp;> (u),*(*it))。

选择权在你。