我有一个带有结构的类和一个包含这些结构的列表 但是当我遍历这个列表时,我无法从我的结构中获取属性。
错误:在'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;
}
答案 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_)