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的目的。