如何解决如何访问指针向量数组中的前向列表,这些指针指向指向对象对象的指针列表的指针向量?
这是相关的代码段:
std::vector<std::vector<std::forward_list<Person*>*>*> grid;
for (int i = 0; i < criticalValuex; i++) {
std::vector<std::forward_list<Person*>*>* list;
for (int j = 0; j < criticalValuey; j++) {
std::forward_list<Person*>* flist;
list->push_back(flist);
}
grid.push_back(list);
}
for (Person *person : people) {
int i = (int)((person -> getPosition().x - city.getPosition().x + citySize.x / 2) / cellSize);
int j = (int)((person -> getPosition().y - city.getPosition().y + citySize.y / 2) / cellSize);
if (i < citySize.x / cellSize && j < citySize.y / cellSize) {
grid[i][j]->push_front(person);
}
}
忽略“人”或任何城市参数。该错误不是由于变量或类引起的。当我编写grid [i] [j]-> push_front(person);时发生错误。即使应该可以。
我认为grid [i] [j]应该是指向前向列表的指针,所以如果我尊重它,那么我会正确返回前向列表吗?但是它表明它没有成员“ push_front”。
解决方法
注意!网格中的元素是指针。
如std::vector<std::vector<std::forward_list<Person*>*>*> grid;
所述,
grid[i]
的类型为std::vector<std::forward_list<Person*>*>*
。
它不是数组,而是数组的指针。因此grid[i][j]
不会编译,而(*(grid[i]))[j]
会编译,其类型为std::forward_list<Person*>*
。
如果想进入转发列表,正确的代码是(*(grid[i]))[j]->push_front(...)
。
更多,将网格声明为类型std::vector<std::vector<std::forward_list<Person*>>>
更简单。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。