在尝试再次使用all_of后,我再次尝试。
if (all_of(Enemies.begin(), Enemies.end(), in_lock_range))
{
lock_on = -1;
}
载体是:
std::vector<Enemy> Enemies;
功能是:
bool Player::in_lock_range(Enemy arg)
{
if (get_distance(mouseTarget.x, mouseTarget.y, arg.x, arg.y) > arg.erect.r) return true;
else return false;
}
get_distance(x1,x2,y1,y2)返回2点的距离
Enemy是玩家的朋友类,反之亦然,所以他们可以自由地使用彼此的东西。
我收到的错误是
error C3867: 'Player::in_lock_range': function call missing argument list; use '&Player::in_lock_range' to create a pointer to member
我不确定为什么他显然是因为in_lock_range而不是因为我不相信它在all_of中需要任何东西,因为我在不同的情况下使用它而没有这样的问题。
任何人都可以向我解释一下这可能是什么原因?我对此并不是很有经验。感谢。
答案 0 :(得分:0)
它是一个成员函数,因此获取指针的语法是
&Player::in_lock_range
仅当它是静态成员时才可用,因为它必须只用一个参数来调用。我猜测它不是 - 大概mouseTarget
是Player
的非静态数据成员。在这种情况下,您必须将其绑定到某个玩家对象:
bind(&Player::in_lock_range, std::ref(some_player), std::placeholders::_1)
或将其包装在lambda中:
[&](const Enemy& e){return some_player.in_lock_range(e);}
函数应该通过常量引用而不是值来获取其参数;你可能想简化return语句
if (whatever) return true;
else return false;
更具可读性
return whatever;