原文链接: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. 错误代码举例

[c-sharp] view plaincopy
  1. size.Width = std::max(size.Width, elementSize.Width);

3. 函数模板max

[c-sharp] view plaincopy
  1. template<class _Ty> inline
  2. const _Ty& (__CLRCALL_OR_CDECL max)(const _Ty& _Left, const _Ty& _Right)
  3. {   // return larger of _Left and _Right
  4. return (_DEBUG_LT(_Left, _Right) ? _Right : _Left);
  5. }

注:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。

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)();)               
[c-sharp] view plaincopy
  1. size.Width = std::max(size.Width, elementSize.Width);

修改为:

[c-sharp] view 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: 语法错误 : “::”相关推荐

  1. error C2059: 语法错误:“::”

    下面这段代码: Index i2 = std::min(0 + slice, loop_size); 编译会出现这样的错误: 1> error C2059: 语法错误:"::" ...

  2. c语言中 c2059错误是,解决error C2059: 语法错误:“::”问题

    错误代码提示: >f:\opencv\opencv\build\include\opencv2\flann\lsh_table.h(): error C2059: 语法错误:"::&q ...

  3. error C2059: 语法错误:“常量”解决方案

    场景 添加海康,宇视SDK对接的头文件和库文件,编译出错提示error C2059: 语法错误:"常量".显示宇视SDK头文件NetDEVSDK.h中宏定义异常  typedef ...

  4. 解决winnt.h(389): error C2059: 语法错误:“;”

    大胸弟:来都来了,不点点关注,不点点赞 ,您是不是有点太不讲武德了! 问题:突然出现winnt.h(389): error C2059: 语法错误:";"  就这么一句话,怎么破, ...

  5. 关于error C2059: 语法错误:“类型”,初学者的一点收获

    今天按照课本抄代码的时候出现了 error C2059: 语法错误:"类型" #include<stdlib.h> #include<stdio.h> in ...

  6. 解决error C2059: 语法错误:“::”问题

    错误代码提示: 1>f:\opencv\opencv\build\include\opencv2\flann\lsh_table.h(266): error C2059: 语法错误:" ...

  7. 错误 2 error C2059: 语法错误:“::”

    设置项目属性,在预定义处理器中添加定义NOMINMAX来禁止使用Vsual C++的min/max宏定义. 项目属性   --> C/C++ --> 预处理器 --> 预处理器定义 ...

  8. error C2059: 语法错误:“,”

    在使用libcef库做MFC开发时,出现一个编译错误:error C2059: 语法错误:"," 这个错误出现的很奇怪,通过撤销修改发现是因为头文件引用的先后顺序造成的.我把#in ...

  9. 最常见的解决方法:error:C2059 语法错误:“using namespace”

    楼主本人也是在编程过程当中遇到了这个问题.看过了很多帖子都没有解决,他们说的都太深奥了.最后我自己找到了错误.我相信大部分人和我犯的是一样的错误.所以记录一下: 看如下代码: #pragma once ...

最新文章

  1. JAVA线程池之双端队列与工作密取workstealingpool java7新加的一种线程池
  2. JS正则表达式详解(转)
  3. 设计模式C++实现——组合模式
  4. CRM数据如何让企业未卜先知
  5. 数据拆分缺点和解决方案
  6. Linux crontab命令
  7. 我认为最节省时间的CSS命名规范
  8. rabbitmq的安装全过程
  9. Java实验二 计算机 1501 王奕开 18
  10. 算法分析与设计「二」递归算法
  11. iTerm2 快捷键收集
  12. 创建数据库、表以及索引
  13. linux还原系统_Linux Kernel 5.5 最终删除 SYSCTL 系统调用
  14. JAX-RS之Jersey入门
  15. 一款好看+极简到不行的HTML5音乐播放器-skPlayer
  16. Excel单元格数据有空格怎样去掉
  17. 王者荣耀服务器什么时候增加人数,王者荣耀正式服凌晨更新,新增几个细节改动...
  18. 初学者如何入门安全测试?
  19. NeurIPS 2019 图机器学习笔记大全!附笔记原文!
  20. QtCreater中添加Debug支持

热门文章

  1. 从零开始写项目第七篇【搭建Linux环境】
  2. 研究Mysql优化得出一些建设性的方案
  3. pgsql自动安装shell脚本整理
  4. 猎豹移动(金山网络)2015校园招聘(c++project师)
  5. PHP Fatal error: Class 'Mongo' not found
  6. 桌面虚拟化在学生教室及机房的应用案例
  7. 动手开发一个简易的 PHP for Git Server 第一章
  8. DISCUZ开启设计插件功能和显示嵌入点功能
  9. Java Date的after和before方法解释
  10. 1021. 个位数统计 (15)