报错信息
做MFC时报错如下:
错误产生的位置为:
错误原因
函数模板max与Visual C++中的全局的宏max冲突。
解决方案
1.修改对应文件(强烈不建议)
网上绝大多数的解决方案是修改代码,
error_threshold = sqrt (std::min (inlier_distance_threshold_sqr, sigma_sqr * variance)); //原版
将上面的代码中的
std::min
改成:
(std::min)
修改后为:
error_threshold = sqrt((std::min)(inlier_distance_threshold_sqr, sigma_sqr * variance));// 修改过
强烈不建议的原因如下:
1.一般不会是类库出了错误,我们使用类库一般不要修改类库本身。
2.修改完以后,会产生更多的报错。
2.给自己的头文件“加点料”(尝试成功的解决方案)
这种方法亲测可行:找到自己代码的头文件,在头文件(与PCL相关)上面添加下面的代码:
#pragma push_macro("min")
#pragma push_macro("max")
#undef min
#undef max
在头文件(与PCL相关)下面添加下面的代码:
#pragma pop_macro("min")
#pragma pop_macro("max")
例如:
头文件如下:
#include "stdafx.h"
#include <iostream>
#include "pcl\point_cloud.h"
#include "pcl\point_types.h"
#include <pcl\visualization\pcl_visualizer.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/passthrough.h>
#include <pcl/segmentation/sac_segmentation.h>
#include <pcl/features/normal_3d.h>
#include <pcl/filters/extract_indices.h>
#include <pcl\io\pcd_io.h>
修改为如下:
#include "stdafx.h"
#include <iostream>
#pragma push_macro("min")
#pragma push_macro("max")
#undef min
#undef max
#include "pcl\point_cloud.h"
#include "pcl\point_types.h"
#include <pcl\visualization\pcl_visualizer.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/passthrough.h>
#include <pcl/segmentation/sac_segmentation.h>
#include <pcl/features/normal_3d.h>
#include <pcl/filters/extract_indices.h>
#include <pcl\io\pcd_io.h>
#pragma pop_macro("min")
#pragma pop_macro("max")
3.在预处理符里加上NOMINMAX(未成功)
第三种方法,我使用之后并没有效果,依然会报错,但是还有很多人说这种方法能解决,具体原因未可知,先把这个方法告诉大家。
在代码顶部添加预处理:
#define NOMINMAX