стереть-удалить идиомы проблемы для вектора в классе

Я использую class1, который содержит несколько управляющих переменных и вектор другого класса, class2. Я хотел бы иметь возможность пометить различные элементы вектора класса 2 (используя логическую переменную «delete_me»), а затем запустить идиому удаления-удаления, чтобы удалить эти элементы из вектора. Я нашел несколько примеров этого в Интернете, но они для более простых структур данных, чем то, что я использую.

Я получаю ошибку преобразования типа при компиляции (используя g ++ v4.7.3).

Class2:

class Interval_structure {
//class uses default destructor
public:
float x1, x2, y1, y2;
float A;
float B;
float delta_x;
bool delete_me;
etc...

Класс 1:

class CMR_Spline {
//class uses default destructor
public:
vector< Interval_structure > Interval;
int some_ints;
float some_floats;

bool IsMarkedToDelete( Interval_structure& o )
{
return o.delete_me;
}

void prune_Intervals() {
//intervals that have been slated for deletion are removed using the remove-erase idiom
Interval.erase( remove_if(Interval.begin(), Interval.end(), IsMarkedToDelete ), Interval.end() );

}

Когда я компилирую, я получаю следующую ошибку, процитированную для единственной строки в процедуре prune_Intervals, используя erase + remove_if:

ошибка: невозможно конвертировать CMR_Spline::IsMarkedToDelete' from typebool (CMR_Spline ::) (Interval_structure&) ‘для ввода `bool (CMR_Spline :: *) (Interval_structure&)»

Я немного сбит с толку относительно того, как мне следует написать функцию IsMarkedToDelete и процедуру prune_Intervals, чтобы правильно отразить указатель, который используется при удалении-if для обхода вектора и оценки IsMarkedToDelete.

Как мне сделать это правильно, используя erase + remove_if, или, если нет, предложите альтернативный подход. Я озадачен и ограничен моим ограниченным опытом программирования. Спасибо!

2

Решение

Сделайте функцию статичной:

static bool IsMarkedToDelete( Interval_structure& o )
{
return o.delete_me;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]