我使用的class1包含一些管理变量和另一个类class2的向量。我希望能够标记class2向量的各种元素(使用布尔变量'delete_me'),然后运行erase-remove习惯用法从向量中消除这些元素。我在网上找到了一些这样的例子,但这些是比我使用的更简单的数据结构。
我编译时遇到类型转换错误(使用g ++ v4.7.3)。
等级2:
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&amp;)'转换为类型`bool(CMR_Spline :: *)(Interval_structure&amp;)'
我对如何编写IsMarkedToDelete函数和prune_Intervals例程以正确反映remove-if用于遍历向量并评估IsMarkedToDelete的指针感到困惑。
如何使用erase + remove_if正确执行此操作,或者如果不是这样,请建议另一种方法。我被有限的编程经验困扰和阻碍。谢谢!
答案 0 :(得分:2)
使函数静态:
static bool IsMarkedToDelete( Interval_structure& o )
{
return o.delete_me;
}