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

news/发布时间2024/5/7 21:21:10

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

  • 错误信息
  • 出错语句
  • 问题原因
  • 解决办法

 

错误信息

① 错误 C2589 “(”:“::”右边的非法标记
② 错误 C2059 语法错误:“)”

出错语句

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

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

问题原因

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

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

#ifndef NOMINMAX#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif#ifndef min
#define min(a,b)            (((a) < (b)) ? (a) : (b))
#endif#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.hC3861    “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>提前到该头文件之前包含 (关键步骤);

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

#undef max
#undef min

这两句话,目的是先将宏定义minmax编译通过windows.h,再解除minmax的宏定义,让minmax函数编译通过之前报错的头文件。

原文链接:https://blog.csdn.net/qq_31437541/article/details/113667722

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/38212670.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

Thinkphp5.x全漏洞复现分析

基础知识 命名空间和子命名空间 我们可以把namespace理解为一个单独的空间,事实上它也就是一个空间而已,子命名空间那就是空间里再划分几个小空间,举个例子: <?phpnamespace animal\cat; class cat{public function __construct(){echo "meow"."\n"…

退出到restart application设置

在主题中加一个退出按钮。 点击退出按钮,增加退出事件中加入如下语句: ModalResult:=mrCancel;

CAN总线原理_学习

随着通信技术的发展,现今通信方式和协议五花八门,但CAN通信仍然是车载网络最安全可靠且应用最广的技术之一。过去,汽车通常采用常规的点对点通信方式将电子控制单元及电子装置连接起来,但随着电子设备的不断增加,导线数量也随之增多,采用CAN总线网络结构,可以达到信息共…

Hommie

Hommie靶机IP:192.168.56.115端口扫描 nmap -Pn -sV -sC 192.168.56.115PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 3.0.3 | ftp-syst: | STAT: | FTP server status: | Connected to ::ffff:192.168.56.101 | Logged in as ftp | TYPE: AS…

回归问题求解 python---梯度下降+最小二乘法

MSE = 1/m * ∑i=1m(yi−y^i)2 a = [1., 2., 3., 4., 5., 6., 7., 8., 9.] b = [3., 5., 7., 9., 11., 13., 15., 17., 19.] points = [[a[i],b[i]] for i in range(len(a))]lr= 0.001 eps = 0.0001 m = len(points) last_error = float(inf) k = b = grad_k = grad_b =…

OO第一次博客作业

前言 前三次作业都是实现一个小型的答题判题程序,后一题都是在前一题的增加了特定的需求。 在这三次题目中,频繁的使用到了正则表达式,还使用到了map类,题量适中,在上一次的基础上进行迭代,难度也是一次比一次大,需求变得更加细致,对于程序健壮性要求更高,同时也要慢慢…