gpt4 book ai didi

C++ 错误 : passing ‘const std::vector’ as ‘this’ argument discards qualifiers [-fpermissive]

转载 作者:行者123 更新时间:2023-11-30 02:17:41 28 4
gpt4 key购买 nike

当我尝试将一个对象插入一组 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);

谢谢

编辑 1:

我正在实现 A 星算法,所以在函数 expandnode 中,如果后继者不是障碍 (!=1),我将它插入到 setvector,这个集合包含每个节点的后继节点,我在问题中添加了更多代码来澄清我的疑问

因为我正在从其他函数(主 A-star 函数)调用 expandnode(),所以我需要在 set 的最后一个 vector 上插入每个节点的后继节点>,我为此目的使用 .end(),因为最初每个 vector 都有一个节点,一旦调用 expandnode() 这个 vector 就有节点及其后继节点

最佳答案

closed_list 是一个 std::set。存储在 set 中的对象是 const 对象,因为修改它们可能会改变修改后的对象相对于 set 中其他对象的排序方式。

当您取消引用set 的迭代器时,您获得的引用是const &。当您随后尝试对该对象调用 push_back 时,编译器会生成错误,因为无法在 const 对象上调用 push_back

代码的另一个问题是任何标准容器的 end 迭代器都不可解引用,这样做会导致未定义的行为。也许您打算改用 back(),它会返回对容器中最后一项的引用?

这仍然不能解决修改集合中对象的问题。为此,您需要从集合中删除对象,对其进行修改,然后重新插入修改后的对象。

关于C++ 错误 : passing ‘const std::vector<Node>’ as ‘this’ argument discards qualifiers [-fpermissive],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53291983/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com