MFC - PCL报错: C2589 “(”:“::”右边的非法标记

27 篇文章 25 订阅
6 篇文章 8 订阅

报错信息

做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

 

 

 

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值