OpenCV报错C2589 “(”:“::”右边的非法标记

OpenCV报错 C2589 “(”:“::”右边的非法标记
这个报错可以出现在多出位置,包括
在这里插入图片描述
在这里插入图片描述
参考这篇文章提供了解决思路和多种解决方法http://blog.jerkybible.com/2016/08/28/QT%E5%BC%95%E7%94%A8OpenCV%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF%EF%BC%9Awarpers-inl-hpp-146-error-C2589-%E2%80%9C-%E2%80%9D-%E2%80%9C-%E2%80%9D%E5%8F%B3%E8%BE%B9%E7%9A%84%E9%9D%9E%E6%B3%95%E6%A0%87%E8%AE%B0/
问题原因
std::numeric_limits()和std()中的函数模板max与Visual C++中的全局的宏max冲突。
解决方法
第一种:将方法加括号,与Vsual C++的min/max宏定义区分开(如果你不嫌麻烦的话)。
在这里插入图片描述
在这里插入图片描述

第二种:设置项目属性,在预定义处理器中添加定义NOMINMAX来禁止使用Visual C++的min/max宏定义。
项目属性 ——> C/C++ ——> 预处理器 ——> 预处理器定义 (此处添加预定义编译开关 NOMINMAX)
但是visual C++中定义能自动匹配double和int,如果进行了上述设置,代码中手动将int型的数据乘以1.0来达到double的目的。
第三种:如果CMake工程,可以通过CMake来设置预定义宏来禁止使用Visual C++的min/max宏定义,并且可以在CMakeLists.txt文件中添加相应的设置。
在这里插入图片描述
这样在生成项目时会自动添加预定义编译开关 NOMINMAX,从而禁止使用Visual C++的min/max宏定义。这样可以避免在代码中手动将int型的数据乘以1.0来达到double的目的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值