Предикат должен возвращать что-то, что может быть преобразовано в bool
. Точнее ( cppreference ):
p - унарный предикат, который возвращает true для требуемого элемента.
Выражение p (v) должно быть конвертируемым в bool для каждого аргумента v типа (возможно, const) VT, где VT является типом значения InputIt, независимо от категории значения, и не должен изменять v. Таким образом, тип параметра VT & не допускается, а также является VT, если для VT движение не эквивалентно копии (начиная с C ++ 11).
Ваш ничего не возвращает:
return;
Вы, вероятно, хотели вместо этого:
if (abs(playerPos.GetX() - pos.GetX()) < playerScale + vertexScale / 1.0f) {
//check the Z axis
if (abs(playerPos.GetZ() - pos.GetZ()) < playerScale + vertexScale / 1.0f) {
return true;
}
}
return false;
Я не знаю, даст ли это правильный результат , это ваше дело, но это «исправляет» ошибку.
PS Полагаю, Vector3f
не ваш тип, поэтому вы должны передать const Vector3f&
предикату, потому что std::find_if
требует, чтобы перемещение было эквивалентно копии, когда вы используете Vector3f
в качестве параметра для предиката (см. Выше).