2

我正在使用包含一些控制变量的 class1 和另一个类 class2 的向量。我希望能够标记 class2 向量的各种元素(使用布尔变量“delete_me”),然后运行擦除删除习语以从向量中消除这些元素。我在网上找到了一些这样的例子,但这些是用于比我使用的更简单的数据结构。

编译时出现类型转换错误(使用 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...

第一类:

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 例程以正确反映 remove-if 用于遍历向量和评估 IsMarkedToDelete 的指针,我有点困惑。

如何使用erase+remove_if 正确执行此操作,或者如果不是这样,请建议另一种方法。我被我有限的编程经验难住了。谢谢!

4

1 回答 1

2

使函数静态:

static bool IsMarkedToDelete( Interval_structure& o )
{
    return o.delete_me;
}
于 2014-02-22T18:32:23.707 回答