解决编译pcl时报错'chrono_literals': is not a member of 'std'
在编译pcl库(1.14.1版)时,产生了这一类报错信息。主要在
visualization\include\pcl\visualization\impl\registration_visualizer.hpp
tools\obj_rec_ransac_scene_opps.cpp
tools\obj_rec_ransac_result.cpp
tools\image_grabber_viewer.cpp
tools\pcd_grabber_viewer.cpp
等文件中产生此错误。
报错信息
error C2871: 'chrono_literals': a namespace with this name does not exist
error C2039: 'chrono_literals': is not a member of 'std'
error C2039: "milliseconds": 不是 "std" 的成员
报错原因
在GNU C/C++编译器的头文件中,包含了thread
之后会隐式地包含chrono
头文件,因而编译时不产生上述错误;但把相同的代码放在Windows平台中用VS2022编译,便会产生此类报错信息------因为从VS2019开始,MSVC的thread
头文件不再包含chrono
。而VS2015的thread
包含了chrono
,可以正常编译。
解决方法
- 显式包含头文件
chrono
。在使用了ms
单位的文件开头增加包含语句:
cpp
#include <chrono>
- 确保打开/c++14开关。确保你的编译器以支持C++14语法的模式进行编译。以Visual Studio为例,应将项目属性作如下设置: