Я пытаюсь использовать решение, заданное в this вопрос в классе. Я использовал «remove_if» с предикатной функцией внутри класса.Использование указателя функции предиката внутри класса C++
void classname::function1()
{
vector<NeighborPoint> neighbors;
....
neighbors.erase(std::remove_if(neighbors.begin(),neighbors.end(),&classname::cannotMoveIn), neighbors.end());
...
}
bool classname::cannotMoveIn(NeighborPoint mp)
{
return !mp.inGridNotOccupied;
}
Этот код будет работать, если он не был в классе, и предикат не был функцией-членом. Однако теперь я получаю длинные сообщения об ошибках, которые, как я полагаю, относятся к несовместимости шаблона remove_if с параметром предиката (одна ошибка включает в себя: ошибка C2064: термин не оценивает функцию, принимающую 1 аргумент).
Примечание: Код предназначен для удаления соседних ячеек сетки, которые агент не может перемещать (из 8 возможных ячеек).
Кто-нибудь знает, что не так?
Не должен ли ваш предикат брать «NeighborPoint» в качестве входного параметра? Ваш вектор имеет тип 'NeighborPoint'. Связаны ли «MoorePoint» и «NeighborPoint»? –
Прошу прощения. Я изменил MoorePoint на NeighborPoint, чтобы было ясно, когда вы отправляете здесь, но пропустили этот. – wmac