迭代列表时无法获取我的struct的属性

时间:2012-05-21 20:53:55

标签: c++ list struct iterator

我有一个带有结构的类和一个包含这些结构的列表 但是当我遍历这个列表时,我无法从我的结构中获取属性。

错误:在'it.std :: _ List_const_iterator< _Tp> :: operator *中使用_Tp = AStarPlanner :: Cell *'请求成员'x_',这是非类型'AStarPlanner :: Cell * const'

标题文件:

class AStarPlanner {

public:

  AStarPlanner(int width, int height, const costmap_2d::Costmap2D* costmap);

  virtual ~AStarPlanner();


 protected:

  struct Cell {

        int x_;
        int y_;
        int f_;   // f = g + h
        int g_;   // g = cost so far
        int h_;   // h = predicted extra cost

        //CellInfo* visited_from_; // pointer to cell from which this cell is visited

        Cell(int x, int y, int g, int h) : x_(x), y_(y), g_(g), h_(h) {
                f_ = g_ + h_;
        }
    };

    bool cellInList(const Cell* cell, const std::list<Cell*> liste);

    };

cpp文件:

bool AStarPlanner::cellInList(const Cell* cell, const list<Cell*> liste)
{
  list<Cell*>::const_iterator it;
  for (it = liste.begin(); it != liste.end(); it++)
  {
     if ( it->x_ == cell->x_ && it->y_ == cell->y_)
        return true;
  }

  return false;
 }

2 个答案:

答案 0 :(得分:4)

你有一个list<Cell*>,所以你需要取消引用迭代器指针。

for (it = liste.begin(); it != liste.end(); it++)
{
   if ( (*it)->x_ == cell->x_ && (*it)->y_ == cell->y_)
      return true;
}

答案 1 :(得分:2)

迭代器类型重载operator ->以返回集合的元素类型。

在您的情况下,这是Cell*Cell*是一个指针,而不是Cell,因此不会定义x。您需要进行另一次取消引用才能获得实际类型。

E.g:

    if ( (*it)->x_ == cell->x_ && (*it)->y_ == cell->y_)