error C2589: “(”:“::”右边的非法标记

举报
风吹稻花香 发表于 2022/06/14 22:58:11 2022/06/14
【摘要】 错误 C2589 “(”:“::”右边的非法标记 这个错误的解决办法: -error C2589: “(”:“::”右边的非法标记 错误信息 出错语句 问题原因 解决办法 错误信息 ① 错误 C2589 “(”:“::”右边的非法标记 ② 错误 C2059 语法错误:“)” 出错语句     &nbsp...

错误 C2589 “(”:“::”右边的非法标记
这个错误的解决办法:

-error C2589: “(”:“::”右边的非法标记
错误信息
出错语句
问题原因
解决办法
错误信息
① 错误 C2589 “(”:“::”右边的非法标记
② 错误 C2059 语法错误:“)”

出错语句


  
  1.       inline double 
  2.       getFitnessScore (double max_range = std::numeric_limits<double>::max());



其中的std::numeric_limits<double>::max()报错了

问题原因
网上查到说函数模板max与Visual C++中的全局的宏max冲突

goto之后发现本应该是函数的max()定位到了minwindef.h下的


  
  1. #ifndef NOMINMAX
  2. #ifndef max
  3. #define max(a,b)            (((a) > (b)) ? (a) : (b))
  4. #endif
  5. #ifndef min
  6. #define min(a,b)            (((a) < (b)) ? (a) : (b))
  7. #endif
  8. #endif  /* NOMINMAX */



也就是说,c++在编译的时候,首先解析宏定义,把本应该是函数的std::numeric_limits<double>::max()解析成了宏,发生了冲突。

解决办法
网络上推荐了几个办法,翻了一圈解决了这个问题,做一下记录,分享给出现这个问题的朋友做个参考

方法1:使用min或者max的时候加上括号

首先和其他的教程中一样不推荐这个方法,因为拿我这个案例来说,出错的点是PCL库中的文件,尽量不要修改

这个我也尝试了一下,推荐这个的帖子,涉及到的函数是std::min,std::max,尝试了帖子中推荐的加括号的方式,以及自己想着把括号换一下位置,但是加入之后都没有解决,就都复原了

方法2:在头文件添加#define NOMINMAX ,或者预处理器添加NOMINMAX
添加后,报错没有解决,而且多出来了

C3861    “min”: 找不到标识符    mfc_bin    C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\GdiplusTypes.h

C3861    “max”: 找不到标识符    mfc_bin    C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\GdiplusTypes.h    481    

出问题的点增加了GdiplusTypes.h,直接关掉min,max宏的定义还是有问题

方法3:#undef max 和 #undef min (亲测有效)

首先找到出报错的头文件的位置,把#include <windows.h>提前到该头文件之前包含 (关键步骤)

然后在包含报错的头文件之前加入


  
  1. #undef max
  2. #undef min



这两句话,目的是先将宏定义min和max编译通过windows.h,再解除min和max的宏定义,让min和max函数编译通过之前报错的头文件
————————————————
版权声明:本文为CSDN博主「青花耄耋」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_31437541/article/details/113667722

文章来源: blog.csdn.net,作者:AI视觉网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/125269610

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。