将迭代器传递到函数中
Passing iterator into function
>我有以下代码,用于从向量中查找最弱的目标,该向量是包含指向所有活动单元的指针的向量。我正在尝试创建一个迭代器,它将遍历每个单元并将其传递给另一个名为 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))。但这不是唯一的问题。有三个选项:
- 而不是常量单位和u,将u声明为单位和u;
- 如果可能,请将其声明为 can_attack(const Unit &u, Unit &v),而不是 can_attack(Unit &u, Unit &v);
- (这可能是最糟糕的选择)使用call can_attack(const_cast <Unit&> (u),*(*it))。
选择权在你。
相关文章:
- 如何在C++中将迭代器作为函数参数传递
- 如何在 c++ 中将字符串迭代器变量传递给函数?
- 为什么我的模板化函数需要从一个迭代器转换到另一个迭代器?
- 如何创建迭代器函数
- 为什么在指向对象的迭代器上调用函数不允许我更改对象本身?
- 迭代器库中的 std::size() 不适用于传递给函数的 C 样式数组
- 使用迭代器的模板类的构造函数
- C++:复制迭代器的构造函数
- 基于函数而不是集合的二分搜索或迭代器?
- 成员函数中的迭代器出现问题
- 使用迭代器的自定义比较器函数
- 专门C++使用指针值类型的通用迭代器的模板函数?
- 从 std::vector 迭代器中执行函数指针
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 如何基于循环迭代器选择函数
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 具有C++迭代器参数的多功能函数
- C++如何获取传递给函数(STL 迭代器)的参数的名称
- C++ 解释重载成员函数迭代器(int i = 0) 的构造"one liner":i(i) { };