将迭代器传递到函数
问题描述:
我有以下代码正在用于从矢量中找到最弱的目标,该矢量是一个包含指向所有活动单元的指针的向量。我正在尝试创建一个遍历每个单元并将其传递给另一个函数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);
}
}
}
}
答
问题是在can_attack调用和参数常量单位& u。 由于songyuanyao提到:can_attack(u,*(* it)),这个调用必须纠正。 但这不是唯一的问题。 有三个选项:中
- ,而不是常量单位& U,声明ü为单位& U;
- 代替can_attack(单位& U,单位& v)中,将其声明为can_attack(常量单位& U,单位& V)如果可能的话; (这可能是最糟糕的选择)使用调用can_attack(const_cast <单元&>(u),*(* it))。
选择是你的。
你可能想'can_attack(u,*(* it))'。 – songyuanyao
这样一个简单的解决方案。谢谢。另一个快速问题..我for循环产生的表达式结果是未使用的错误..为什么会这样?是否在for循环中使用表达式结果? – spaceinvaders101
什么是*表达结果*?你展示的代码中有哪部分内容? – songyuanyao