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. 错误代码举例
plaincopy
- size.Width = std::max(size.Width, elementSize.Width);
 
3. 函数模板max
plaincopy
- 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)();)  | 
plaincopy
- size.Width = std::max(size.Width, elementSize.Width);
 
修改为:
plsize.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: 语法错误 : “::”的更多相关文章
- std::max、std::min error C2589: “(”:“::”右边的非法标记,error C2059: 语法错误:“::”
		
在VC++种同时包含头文件#include <windows.h>和#include <algorithm>后就会出现无法正常使用std标准库中的min和max模板函数,经过查 ...
 - error C2589: “(”: “::”右边的非法标记 error C2059: 语法错误 : “::
		
1. 错误输出 ./zlibrary/ui/src/win32/w32widgets/W32VBorderBox.cpp(114) : error C2589: “(”: “::”右边的非法标记 ...
 - std::min error C2059: 语法错误:“::” 的解决方法
		
std::min error C2059: 语法错误:"::" 的解决方法 下面这段代码: size_t n = std::min(count_, num_elements); 编 ...
 - 关于CUDA C 项目中“ error C2059: 语法错误:“<” ”问题的解决方法
		
该问题的关键在于理解CUDA项目中C\C++文件需要由c++编译器进行编译,而CUDA C的源文件需要由CUDA的编译器nvcc.exe进行编译. 发生该语法错误的原因是cu文件被C++编译器所编译, ...
 - 解决error C2059: 语法错误:“::”问题
		
错误代码提示: >f:\opencv\opencv\build\include\opencv2\flann\lsh_table.h(): error C2059: 语法错误:“::”f:\ope ...
 - vs2012 MinGW编译ffmpeg 出现libavdevice/avdevice.c(38) : error C2059: 语法错误:“.”
		
利用vs2012编译ffmpeg出现以下错误: libavdevice/avdevice.c(38) : error C2059: 语法错误:“.” libavdevice/avdevice.c(40 ...
 - 错误	2	error C2059: 语法错误:“::”
		
设置项目属性,在预定义处理器中添加定义NOMINMAX来禁止使用Vsual C++的min/max宏定义. 项目属性 ——> C/C++ ——> 预处理器 ——> 预处理器定义 ...
 - opencv2\core\cuda.hpp(106): error C2059: 语法错误:“常量”
		
在 cuda.hpp 中, virtual void free(GpuMat* mat) = 0; -> virtual void _free(GpuMat* mat) = 0;
 - opencv2\flann\matrix.h(69): error C2059: 语法错误:“,”
		
在提示错误的matrix.h头文件中,修改一下,在free前加上_ ,即FLANN_DEPRECATED void _free() .
 
随机推荐
- 利用vue-gird-layout 制作可定制桌面 (一)
			
安装 vue-gird-layout https://github.com/jbaysolutions/vue-grid-layout 先跑一遍demo 运行起来. # install with np ...
 - proc程序中使用PLSQL、Exception 、 动态SQL(day08)
			
. proc中如何使用plsql 1.1 使用plsql的语法 exec sql execute begin /* 相当于plsql的匿名块 */ end; end-exec; 在预编译时,需要加如下 ...
 - 9.在idea中创建Maven项目
			
1.新建maven WEB项目 打开-File-New-Project 点击NEXT 2.选择项目组,并给项目命名 3.选择maven路径 添加的配置为 archetypeCatalog=intern ...
 - opencv学习HighGUI图形用户界面初步【1】
			
HighGUI是图形用户界面模块.包括:1.输入与输出:2.视频捕捉:3.图形和视频的解码编码:4.图形交界面与接口. 由于opencv.hpp包含了core.objdetect.ingproc.ph ...
 - [bzoj1090][SCOI2003]字符串折叠_区间dp
			
字符串折叠 bzoj-1090 SCOI-2003 题目大意:我说不明白...链接 注释:自己看 想法:动态规划 状态:dp[i][j]表示从第i个字符到第j个字符折叠后的最短长度. 转移:dp[l] ...
 - vim编辑强制执行命令
			
vim进入文件,输入i编辑好文件,按esc,输入冒号,再输入底下代码 :w !sudo tee %
 - HDU 3432
			
水题,就是把一个矩形平分. 题意:一个wid*hei的矩形,过底边上的一点(dor,0)做m-1条射线,把这个矩形的面积平均分成m份,求这些射线和矩形的另外一个交点. 直接枚举,然而求三角形高底移动坐 ...
 - POJ  1155
			
很久以前做的树形DP题,今天再遇到时,竟然不会了,所以写写.. 设数组: prf[MAX][MAX],cost[MAX],sum[MAX].分别表示,在第i个结点为根的子树内的情况下,若有j个用户申请 ...
 - iOS开发——定制圆形头像与照相机图库的使用
			
如今的App都很流行圆形的头像,比方QQ右上角的头像,今日头条的头像等等.这已经成为App设计的趋势了.今天我们就来简单实现一下这个功能,我还会把从手机拍照中或者图库中取出作为头像的照片存储到应用程序 ...
 - H_Dp
			
<span style="color:#000099;">/* H - 简单dp 例题扩展 Time Limit:3000MS Memory Limit:65536KB ...