- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试将一个对象插入一组 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
),我将它插入到 set
中vector
,这个集合包含每个节点的后继节点,我在问题中添加了更多代码来澄清我的疑问
因为我正在从其他函数(主 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/
根据这个answer ,下面的代码应该没有错误地编译: #include namespace { struct A { int i; }; volatile A a{}; static_assert
我了解导入 Data.List。 但是 importqualified Data.List 语句中的 qualified 是什么意思? 最佳答案 合格的导入使导入的实体仅以合格的形式可用,例如 imp
我正在尝试创建一个组件,该组件将接受一个特定的 bean (fasterxml ObjectMapper)。 如果有一个名为 qualifiedObjectMapper 的限定 bean,我想使用那个
我一直在编写以下代码来支持对右值的函数调用,而不必 std::move明确地在返回值上。 struct X { X& do_something() & { // some co
我正在尝试使用 GCC 编译器编译以下代码 class Class { public: uInt16 temp; const uInt32 function() const; } inline
我试图理解为什么我的编译器警告我有关此代码: static const char *const _menuMain_Strings_1[] __ATTR_PROGMEM__ = { _menuMai
我正在尝试将 Spring 4.x.x 迁移到 Spring boot,它依赖于外部 spring 2.5 jar 中的类。我已经进行了所有 Autowiring 更改,下面是我的应用程序类 @Spr
我从 eclipse git 中查看了最新的源代码:git://git.eclipse.org/gitroot/platform/eclipse.platform.releng.aggregator.
我发现许多门户网站都解释了类似的问题。但我想这是独特的情况。我在 spring mvc 应用程序中遇到错误。 org.springframework.beans.factory.Unsatisfied
我有下面的代码: package far.botshop.backend.controller; /** */ import java.util.logging.Logger; import far
我有 3 个数据源,设置如下: @Configuration @Component public class DataSourceConfig { @Bean("foo") @Conf
如何添加限定符来区分这两个 bean?我知道我需要使用 @Qualifier 注释,但我不确定如何将它添加到 bean 中,然后如何引用适当的 bean 创建 Autowiring 对象。 @Conf
@Override @Autowired(required = true) @Qualifier("hibernateCriteriaBuilder") public void setCriteria
我有 Circle 类: public class Circle { @Autowired @Qualifier("pointA") private Point center;
我在 Java Spring 环境中工作,并且在让 @Qualifier 工作时遇到了问题。我们项目的其他部分正在使用 @Inject 获取一个 bean,但我需要同一个 bean 的两个版本,看起来
“qualifier”的含义是什么?“qualifier”和“keyword”之间的区别是什么? 对于C语言中的volatile限定词,我们可以说volatile是一个关键字,那么“qualifier
我有一个简单的宏来设置一些常见的标题和格式: Dim colString(1 To 17, 1 To 2) As String Dim i As Integer colString(1, 1) = "
我正在将 Teradata 转换为 Hive(版本 0.10.0)。 Teradata 查询: QUALIFY ROW_NUMBER() OVER (PARTITION BY ADJSTMNT,SRC
我是在 PHP 中使用命名空间的新手,它们看起来很简单。然而,当我在一个包含类、接口(interface)和闭包的大文件的顶部添加一个命名空间时,代码完全停止工作。显然,某些元素没有正确限定。 例如:
我正在尝试使用属性占位符作为@Qualifier 的属性,如下所示: @Autowired @Qualifier("${beanName}") private MyBean myBean; 但是,这不
我是一名优秀的程序员,十分优秀!