将迭代器传递到函数

问题描述:

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

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

} 
+0

你可能想'can_attack(u,*(* it))'。 – songyuanyao

+0

这样一个简单的解决方案。谢谢。另一个快速问题..我for循环产生的表达式结果是未使用的错误..为什么会这样?是否在for循环中使用表达式结果? – spaceinvaders101

+1

什么是*表达结果*?你展示的代码中有哪部分内容? – songyuanyao

问题是在can_attack调用和参数常量单位& u。 由于songyuanyao提到:can_attack(u,*(* it)),这个调用必须纠正。 但这不是唯一的问题。 有三个选项:中

  1. ,而不是常量单位& U,声明ü为单位& U;
  2. 代替can_attack(单位& U,单位& v)中,将其声明为can_attack(常量单位& U,单位& V)如果可能的话; (这可能是最糟糕的选择)使用调用can_attack(const_cast <单元&>(u),*(* it))。

选择是你的。