原文链接: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
plain
copy

  1. size.Width = std::max(size.Width, elementSize.Width);

3. 函数模板max

[c-sharp] view
plain
copy

  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
plain
copy

  1. size.Width = std::max(size.Width, elementSize.Width);

修改为:

[c-sharp] view
pl
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: 语法错误 : “::”的更多相关文章

  1. std::max、std::min error C2589: “(”:“::”右边的非法标记,error C2059: 语法错误:“::”

    在VC++种同时包含头文件#include <windows.h>和#include <algorithm>后就会出现无法正常使用std标准库中的min和max模板函数,经过查 ...

  2. error C2589: “(”: “::”右边的非法标记 error C2059: 语法错误 : “::

    1. 错误输出 ./zlibrary/ui/src/win32/w32widgets/W32VBorderBox.cpp(114) : error C2589: “(”: “::”右边的非法标记    ...

  3. std::min error C2059: 语法错误:“::” 的解决方法

    std::min error C2059: 语法错误:"::" 的解决方法 下面这段代码: size_t n = std::min(count_, num_elements); 编 ...

  4. 关于CUDA C 项目中“ error C2059: 语法错误:“<” ”问题的解决方法

    该问题的关键在于理解CUDA项目中C\C++文件需要由c++编译器进行编译,而CUDA C的源文件需要由CUDA的编译器nvcc.exe进行编译. 发生该语法错误的原因是cu文件被C++编译器所编译, ...

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

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

  6. vs2012 MinGW编译ffmpeg 出现libavdevice/avdevice.c(38) : error C2059: 语法错误:“.”

    利用vs2012编译ffmpeg出现以下错误: libavdevice/avdevice.c(38) : error C2059: 语法错误:“.” libavdevice/avdevice.c(40 ...

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

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

  8. opencv2\core\cuda.hpp(106): error C2059: 语法错误:“常量”

    在 cuda.hpp 中, virtual void free(GpuMat* mat) = 0;   -> virtual void _free(GpuMat* mat) = 0;

  9. opencv2\flann\matrix.h(69): error C2059: 语法错误:“,”

    在提示错误的matrix.h头文件中,修改一下,在free前加上_ ,即FLANN_DEPRECATED void _free() .

随机推荐

  1. 使用百度fis3构建前端多页应用

    吾日三省吾身. 从一个完全不相干的行业转到IT,多多少少都会感到迷茫,不知道学习什么.从何学起?在几乎没有任何经验的背景下,坚持投递简历,最后终于进入了一个创业公司,开始做起了前端工作.工资勉强维持生 ...

  2. Problem 20

    Problem 20 问题网址:https://projecteuler.net/problem=20 n! means n × (n − 1) × ... × 3 × 2 × 1阶乘For exam ...

  3. Git 基础教程 之 创建版本库

    一,选择一个合适的地方,创建空目录,下面两种方法都可 ①   手动新建 ②   使用命令: mkdir pythonwork 二,初始化,使目录变成Git可管理的仓库        执行: git i ...

  4. P1040 加分二叉树(树上记忆化搜素)

    这道题很水 但我没做出来……………………………… 我写的时候状态设计错了,设计dp[l][m][r]为从l到r以m为根的值 这样写遍历状态就是n^3的,会TLE. 而且写路径的时候是用结构体写的,这样 ...

  5. BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演)

    手动博客搬家:本文发表于20180310 11:46:11, 原地址https://blog.csdn.net/suncongbo/article/details/79506484 题目链接: (Lu ...

  6. win7的目录和vbox的共享,linux中没有权限打开

    来自于 http://www.cnblogs.com/usegear/p/5120427.html win7的目录由vbox共享是个老话题.稳拿网上很多介绍. 在linux中通过文件夹不能打开,说没有 ...

  7. Mahmoud and a Dictionary

    Mahmoud and a Dictionary time limit per test 4 seconds memory limit per test 256 megabytes input sta ...

  8. FADE:云存储中数据安全删除

         FADE: Secure Overlay Cloud Storage with File Assured Deletion ,论文发表于SecureComm,C类.      香港大学的研究 ...

  9. 【ACM】poj_3981_字符串替换_201307271019

    字符串替换Time Limit: 1000MS  Memory Limit: 65536K Total Submissions: 8447  Accepted: 3988 Description 编写 ...

  10. redis-不常用的命令

    在不重启redis服务器的情况下,动态的修改Redis的配置 redis> config set loglevel warning