【发布时间】:2018-11-14 01:42:31
【问题描述】:
当我尝试将一个对象插入一组stl vector 时出现此错误,Node 是我创建的一个类。 ¿ 你能解释一下如何解决这个错误吗?
代码:
void car::expandnode(Node& current_node,std::set<vector<Node> >& closed_list,grid& map){
int c_a = current_node.get_x();
int c_b= current_node.get_y();
if((map.get(c_a,++c_b))!=1){
point p(c_a,++c_b);
Node ns(p,costtan);
costtan= 1+ heuristic1(ns); // cost to arrive node
if(std::find((*closed_list.end()).begin(),(*closed_list.end()).end(),ns)==((*closed_list.end()).end()))
closed_list.end()->push_back(ns); //error
}
float car::heuristic1(Nodo& successor){
int c1= successor.get_x();
int c2= successor.get_y();
float result = sqrt(pow((c1-destination_point_.get_x()),2) + pow((c2-destination_point_.get_y()),2));
return resultado;
}
错误:
error: passing ‘const std::vector<Node>’ as ‘this’ argument discards qualifiers [-fpermissive]
closed_list.end()->push_back(ns);
谢谢
EDIT1:
我正在实现A星算法,所以在函数expandnode中如果后继者不是障碍物(!=1),我将它插入到vector的set中,这个集合包含每个后继节点节点,我在问题中添加了更多代码以澄清我的疑问
因为我从其他函数(主要 A-star 函数)调用 expandnode(),我需要在 set 的最后一个向量上插入每个节点的后继,为此我使用 .end(),因为最初每个向量都有一个节点,一旦调用expandnode(),这个向量就有节点及其后继节点
【问题讨论】:
-
closed_list.end()->push_back(ns);-- 你到底想用那行代码完成什么?不管是什么,那段代码都做不到。 -
取消引用
.end()是未定义的行为,因为它仅充当占位符。它指向最后一个元素。 -
*closed_list.end()-- 您可以在多个地方执行此操作。这是完全错误的(取消引用 end() 迭代器)。所以你应该说明你想用这些行做什么。 -
@PaulMcKenzie 我编辑了问题
-
@AER 集合的最后一个元素是closed_list.rbegin()。取消引用
end()是未定义的行为。
标签: c++ object compilation iterator set