max 宏定义取消:error C2589: error C2059: 语法错误 : “::”
原文链接:http://blog.csdn.net/danelumax2/article/details/9172465有修改!
一:关于Pcl和WIndef的冲突:
1. 错误输出
./zlibrary/ui/src/win32/w32widgets/W32VBorderBox.cpp(114) : error C2589: “(”: “::”右边的非法标记
./zlibrary/ui/src/win32/w32widgets/W32VBorderBox.cpp(114) : error C2059: 语法错误 : “::”
2. 错误代码举例
- size.Width = std::max(size.Width, elementSize.Width);
3. 函数模板max
- template<class _Ty> inline
- const _Ty& (__CLRCALL_OR_CDECL max)(const _Ty& _Left, const _Ty& _Right)
- { // return larger of _Left and _Right
- return (_DEBUG_LT(_Left, _Right) ? _Right : _Left);
- }
注:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。
4. 错误原因
函数模板max与Visual C++中的全局的宏max冲突。
5. 解决办法
第一种办法:设置项目属性,在预定义处理器中添加定义NOMINMAX来禁止使用Vsual C++的min/max宏定义。
项目属性 ——> C/C++ ——> 预处理器 ——> 预处理器定义 (此处添加预定义编译开关 NOMINMAX)
注意!!!一定要加在第一个上面!!!坑爹的微软!!!
第二种办法: 加上括号,与Vsual C++的min/max宏定义区分开
(可能是跟Windows中定义的宏想混淆了 可以用括号改变语句的顺序,强制制定为stl中的函数名 double min=(std::numeric_limits<double>::max)();) |
- size.Width = std::max(size.Width, elementSize.Width);
修改为:
二:终极方案:对于使用了Windef文件的AtlImage.h 和GDIPlus.h
直接对里面的max() min()函数进行替换 ;
或者 在使用到 max() min()函数 的头文件定义后面添加:
if nodef max
def max(a,b) FUN..............
endDEF....
max 宏定义取消:error C2589: error C2059: 语法错误 : “::”相关推荐
- error C2059: 语法错误:“::”
下面这段代码: Index i2 = std::min(0 + slice, loop_size); 编译会出现这样的错误: 1> error C2059: 语法错误:"::" ...
- c语言中 c2059错误是,解决error C2059: 语法错误:“::”问题
错误代码提示: >f:\opencv\opencv\build\include\opencv2\flann\lsh_table.h(): error C2059: 语法错误:"::&q ...
- error C2059: 语法错误:“常量”解决方案
场景 添加海康,宇视SDK对接的头文件和库文件,编译出错提示error C2059: 语法错误:"常量".显示宇视SDK头文件NetDEVSDK.h中宏定义异常 typedef ...
- 解决winnt.h(389): error C2059: 语法错误:“;”
大胸弟:来都来了,不点点关注,不点点赞 ,您是不是有点太不讲武德了! 问题:突然出现winnt.h(389): error C2059: 语法错误:";" 就这么一句话,怎么破, ...
- 关于error C2059: 语法错误:“类型”,初学者的一点收获
今天按照课本抄代码的时候出现了 error C2059: 语法错误:"类型" #include<stdlib.h> #include<stdio.h> in ...
- 解决error C2059: 语法错误:“::”问题
错误代码提示: 1>f:\opencv\opencv\build\include\opencv2\flann\lsh_table.h(266): error C2059: 语法错误:" ...
- 错误 2 error C2059: 语法错误:“::”
设置项目属性,在预定义处理器中添加定义NOMINMAX来禁止使用Vsual C++的min/max宏定义. 项目属性 --> C/C++ --> 预处理器 --> 预处理器定义 ...
- error C2059: 语法错误:“,”
在使用libcef库做MFC开发时,出现一个编译错误:error C2059: 语法错误:"," 这个错误出现的很奇怪,通过撤销修改发现是因为头文件引用的先后顺序造成的.我把#in ...
- 最常见的解决方法:error:C2059 语法错误:“using namespace”
楼主本人也是在编程过程当中遇到了这个问题.看过了很多帖子都没有解决,他们说的都太深奥了.最后我自己找到了错误.我相信大部分人和我犯的是一样的错误.所以记录一下: 看如下代码: #pragma once ...
最新文章
- JAVA线程池之双端队列与工作密取workstealingpool java7新加的一种线程池
- JS正则表达式详解(转)
- 设计模式C++实现——组合模式
- CRM数据如何让企业未卜先知
- 数据拆分缺点和解决方案
- Linux crontab命令
- 我认为最节省时间的CSS命名规范
- rabbitmq的安装全过程
- Java实验二 计算机 1501 王奕开 18
- 算法分析与设计「二」递归算法
- iTerm2 快捷键收集
- 创建数据库、表以及索引
- linux还原系统_Linux Kernel 5.5 最终删除 SYSCTL 系统调用
- JAX-RS之Jersey入门
- 一款好看+极简到不行的HTML5音乐播放器-skPlayer
- Excel单元格数据有空格怎样去掉
- 王者荣耀服务器什么时候增加人数,王者荣耀正式服凌晨更新,新增几个细节改动...
- 初学者如何入门安全测试?
- NeurIPS 2019 图机器学习笔记大全!附笔记原文!
- QtCreater中添加Debug支持