error: the type ‘const zjloc::<lambda(const Vec2i, const Vec2i)>’

catkin_make 编译时遇到这个问题:

/home/robot/ct_lio/src/ct-lio/src/common/eigen_types.h:114:20: error: the type ‘const zjloc::<lambda(const Vec2i&, const Vec2i&)>’ of ‘constexpr’ variable ‘zjloc::less_vec2i’ is not literal 114 | constexpr auto less_vec2i = | ^~~~ /home/robot/ct_lio/src/ct-lio/src/common/eigen_types.h:114:34: note: ‘zjloc::<lambda(const Vec2i&, const Vec2i&)>’ is not literal because: 114 | constexpr auto less_vec2i = | ^ cc1plus: note: ‘zjloc::<lambda(const Vec2i&, const Vec2i&)>’ is a closure type, which is only literal in C++17 and later In file included from /home/robot/ct_lio/src/ct-lio/src/tools/point_types.h:12, from /home/robot/ct_lio/src/ct-lio/src/preprocess/cloud_convert/cloud_convert.h:9, from /home/robot/ct_lio/src/ct-lio/src/preprocess/cloud_convert/cloud_convert.cc:1: /home/robot/ct_lio/src/ct-lio/src/common/eigen_types.h:114:20: error: the type ‘const zjloc::<lambda(const Vec2i&, const Vec2i&)>’ of ‘constexpr’ variable ‘zjloc::less_vec2i’ is not literal 114 | constexpr auto less_vec2i = | ^~~~ /home/robot/ct_lio/src/ct-lio/src/common/eigen_types.h:114:34: note: ‘zjloc::<lambda(const Vec2i&, const Vec2i&)>’ is not literal because: 114 | constexpr auto less_vec2i =

        这个错误是因为代码中使用了一个 constexpr lambda 表达式 less_vec2i,但 lambda 表达式在 C++11 和 C++14 中并不是字面量类型(literal type),因此不能用于 constexpr 变量的定义。

解决方法:

1.升级到 C++17 或更高版本

        在 C++17 中,lambda 表达式可以成为字面量类型,从而可以用于 constexpr 变量的定义。如果你的编译器支持,可以将代码标准提升到 C++17。

# 在 CMakeLists.txt 中设置编译标准为 C++17
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

2. 使用函数对象代替 lambda 表达式

        如果不能升级到 C++17,可以将 lambda 表达式替换为具有 operator() 的结构体或类。这样的结构体或类可以在 C++11 和 C++14 中作为 constexpr 使用。

struct LessVec2i {constexpr bool operator()(const Vec2i &v1, const Vec2i &v2) const {// Your comparison logic herereturn v1.x() < v2.x() || (v1.x() == v2.x() && v1.y() < v2.y());}
};constexpr LessVec2i less_vec2i;

        然后在需要使用的地方使用 less_vec2i,如:

std::map<Vec2i, int, LessVec2i> my_map;

3. 避免使用 constexpr

        如果不需要在编译时计算结果,可以将 constexpr 移除,将 lambda 表达式普通地定义为一个变量或函数。

auto less_vec2i = [](const Vec2i &v1, const Vec2i &v2) {return v1.x() < v2.x() || (v1.x() == v2.x() && v1.y() < v2.y());
};

        然后在需要使用的地方直接使用 less_vec2i。 

总结

        根据你的项目需要和编译器支持情况,选择适合的解决方案来修复 constexpr lambda 表达式不是字面量类型的问题。通常推荐升级到支持 C++17 的编译器版本,以便能够更好地利用现代 C++ 的特性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/31516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI落地不容乐观-从神话到现实

开篇 在这儿我不是给大家泼冷水&#xff0c;而是我们一起来看一下从2022年11月左右GPT3.0掀起了一股“AI狂潮”后到现在&#xff0c;AI在商用、工业、军用下到底有没有得到了大规模应用呢&#xff1f; 这个答案每一个参与者其实心里有数那就是&#xff1a;没有。 但是呢它的…

OrangePi连接Wi-Fi步骤

下面介绍的是用终端命令行的方式配置WIFI&#xff1a; 首先输入以下命令用于扫描并查看周围的WiFi热点。也可以直接连接。 nmcli dev wifi之后会在终端打出周围所有可以连接的WiFi&#xff0c;按方向键上下可以查看显示更多&#xff0c;按q键退出。 然后同样使用nmcli命令连接…

提升教学效率的全方位解决方案

在现代教育环境中&#xff0c;教学管理的复杂性与日俱增。如何高效管理教学活动、优化教师资源、提升教学质量&#xff0c;是每个教育机构面临的重要挑战。搭贝教务教学管理系统提供了一套全面的解决方案&#xff0c;涵盖了巡检、调课代课、生源登记、监考、外派、作业发布、听…

机器学习(V)--无监督学习(六)流形学习

title: 机器学习(V)–无监督学习(二)流形学习 date: katex: true categories: Artificial IntelligenceMachine Learning tags:机器学习 cover: /img/ML-unsupervised-learning.png top_img: /img/artificial-intelligence.jpg abbrlink: 26cd5aa6 description: 流形学习 【降…

L54--- 404.左叶子之和(深搜)---Java版

1.题目描述 2.思路 递归遍历左子树 &#xff0c;然后再把左子树的和相加 3.代码实现 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val …

代码随想录算法训练营第四十五天|LeetCode337 打家劫舍Ⅲ

题1&#xff1a; 指路&#xff1a;337. 打家劫舍 III - 力扣&#xff08;LeetCode&#xff09; 思路与代码&#xff1a; 方法一&#xff1a;暴力 暴力解法&#xff1a;我们讨论根结点处的偷取形式。此时情况分为两种&#xff1a;考虑偷取根节点&#xff0c;和不考虑偷取根节…

深度学习调参笔记

就是因为增加了下面这个代码片段&#xff0c;使得训练过程耗时增加了3倍。。。 def set_seed(seed):random.seed(seed)np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed(seed)torch.cuda.manual_seed_all(seed)cudnn.benchmark Falsecudnn.deterministic …

【Git】--Part4--多人协作

在之前的Git博客中&#xff0c;已经把Git本地相关的操作以及远程操作的介绍完了。如下&#xff1a; Git–Part1–基础操作 - 掘金 (juejin.cn)Git–Part2–分支管理 - 掘金 (juejin.cn)Git–Part3–远程操作 & 配置 & 标签管理 - 掘金 (juejin.cn) 这篇文章会介绍两种…

iptables(5)常用扩展模块

简介 之前我们已经介绍过扩展模块的简单使用,比如使用-m tcp/udp ,-m multiport参数通过--dports,--sports可以设置连续和非连续的端口范围。那么我们如何匹配其他的一些参数呢,比如源地址范围,目的地址范围,时间范围等,这就是我们这篇文章介绍的内容。 iprange扩展模块…

Eclipse使用TFS(Team Foundation Server) 超详细

Eclipse使用TFS 1、什么是TFS2、TFS和Git的区别3、签出代码4、签入代码4.1、签出以进行编辑4.2、修改本地代码4.3、签入挂起的更改4.4、签入 如果不能 签入挂起的更改&#xff0c;则先 签出以进行编辑如果 签入挂起的更改不可选中&#xff0c;则 如下操作 1、什么是TFS Team F…

thinkphp5模型的高级应用

ThinkPHP5 是一个基于 PHP 的轻量级框架&#xff0c;它提供了许多便利的功能来简化 Web 开发。在 ThinkPHP5 中&#xff0c;模型&#xff08;Model&#xff09;是 MVC&#xff08;Model-View-Controller&#xff09;架构中的重要组成部分&#xff0c;负责处理数据逻辑。以下是一…

音视频开发—FFmpeg 打开摄像头进行RTMP推流

实验平台&#xff1a;Ubuntu20.04 摄像头&#xff1a;普通USB摄像头&#xff0c;输出格式为YUV422 1.配置RTMP服务器推流平台 使用Nginx 配置1935端口即可&#xff0c;贴上教程地址 ubuntu20.04搭建Nginxrtmp服务器) 2.配置FFmpeg开发环境 过程较为简单&#xff0c;这里不…

决战技术管理转型:决策之道-管理中的智慧与策略

文章目录 引言一、决策的重要性二、常见的决策方式1. 理性决策&#xff08;Rational Decision Making&#xff09;2. 有限理性&#xff08;Bounded Rationality&#xff09;3. 直觉决策&#xff08;Intuitive Decision Making&#xff09;4. 循证管理&#xff08;Evidence-Base…

智能血压计,让健康“听”得见- WT588F02B血压计语音方案

一、语音血压计开发背景&#xff1a; 在快节奏的现代生活中&#xff0c;健康成为了我们最宝贵的财富。而血压&#xff0c;作为反映人体健康状态的重要指标之一&#xff0c;更是需要我们时刻关注。传统的血压计虽然能够为我们提供准确的血压数据&#xff0c;但往往因为操作复杂…

C#ListView的单元格支持添加基本及自定义任意控件

功能说明 使用ListView时&#xff0c;希望可以在单元格显示图片或其他控件&#xff0c;发现原生的ListView不支持&#xff0c;于是通过拓展&#xff0c;实现ListView可以显示任意控件的功能&#xff0c;效果如下&#xff1a; 实现方法 本来想着在单元格里面实现控件的自绘的…

20240621在飞凌的OK3588-C开发板的Buildroot系统中集成i2ctool工具

20240621在飞凌的OK3588-C开发板中打开i2ctool工具 2024/6/21 17:44 默认继承的i2c工具&#xff1a; rootrk3588-buildroot:/# rootrk3588-buildroot:/# i2c i2c-stub-from-dump i2cdump i2cset i2cdetect i2cget i2ctransfer rootrk3588-…

史上最全的整合Harbor安装教程,哈哈哈哈

一、安装docker 下载地址&#xff1a;https://download.docker.com/linux/static/stable/x86_64/docker-23.0.4.tgz 1.1 解压二进制包 wget https://download.docker.com/linux/static/stable/x86_64/docker-23.0.4.tgz tar zxvf docker-23.0.4.tgz mv docker/* /usr/bin1.2…

【LinuxC语言】线程的概念

文章目录 前言一、线程的概念总结前言 在Linux操作系统中,线程是最小的执行单元。线程是进程的一部分,每个线程都共享其父进程的地址空间,并且可以并行执行。在C语言中,我们可以使用POSIX线程(也称为Pthreads)库来创建和控制线程。线程编程在许多场景中都非常有用,例如…

Flutter 实现软鼠标

文章目录 前言一、如何实现&#xff1f;1、记录鼠标偏移2、MouseRegion获取偏移3、Transform移动图标 二、完整代码三、使用示例总结 前言 flutter在嵌入式系统中运行时&#xff0c;有可能遇到drm鼠标无法使用的情况&#xff0c;但鼠标事件却可以正常接收&#xff0c;此时如果…

迁移Microsoft Edge

如何将Microsoft Edge迁移到d盘&#xff1f;对于Microsoft Edge想必大部分人都不陌生&#xff0c;它是Windows操作系统的默认浏览器&#xff0c;存储用户的个人数据、缓存和设置等信息。有些时候&#xff0c;我们需要对Microsoft Edge中的数据进行数据迁移&#xff0c;以释放c盘…