Я использую 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 type
bool (CMR_Spline ::) (Interval_structure&) ‘для ввода `bool (CMR_Spline :: *) (Interval_structure&)»
Я немного сбит с толку относительно того, как мне следует написать функцию IsMarkedToDelete и процедуру prune_Intervals, чтобы правильно отразить указатель, который используется при удалении-if для обхода вектора и оценки IsMarkedToDelete.
Как мне сделать это правильно, используя erase + remove_if, или, если нет, предложите альтернативный подход. Я озадачен и ограничен моим ограниченным опытом программирования. Спасибо!
Сделайте функцию статичной:
static bool IsMarkedToDelete( Interval_structure& o )
{
return o.delete_me;
}
Других решений пока нет …