zoukankan      html  css  js  c++  java
  • std::max、std::min error C2589: “(”:“::”右边的非法标记,error C2059: 语法错误:“::”

      在VC++种同时包含头文件#include <windows.h>和#include <algorithm>后就会出现无法正常使用std标准库中的min和max模板函数,经过查阅发现这是因为在Windows.h种也有min和max的定义,这样就导致了algorithm中的min和max无法正常使用,这里给出两种解决方案,来解决std命名空间无法使用min和max的问题。

    解决方案一

    使用std::min或者std::max的时候加上括号,避免与Windows.h中的min、max宏定义冲突。

    #include <windows.h>
    #include <algorithm>
    (std::min)(100,2000);
    (std::max)(10,500);

    解决方案二

    禁用Windows.h中的min、max宏定义。

    在Windows.h中可以查阅到min、max的定义为:

    #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 */

    看懂了定义就很简单了,在包含Windows.h文件之前直接定义一个NOMINMAX宏定义就OK了,如下代码所示:

    #define NOMINMAX
    #include <windows.h>
    #include <algorithm>
    std::max(100, 200);

    解决方案三:

    这个解决办法与第二个本质是一样的。具体方法为:打开工程属性->C/C++->预处理器->预处理器定义->加入NOMINMAX

    OK,经过上面的操作,min,max操作已经正常了。

  • 相关阅读:
    爱奇艺大数据招聘
    服务设计要解决的问题
    化腐朽为神奇:简明日志规范
    免费攻读人工智能专业,让自己的身价翻番
    JAVA日志的前世今生
    盖洛普Q12在团队中的应用
    漫画:鉴权与安全访问控制的技术血脉
    正确的git开发流程
    'Attempt to create two animations for cell' iOS
    Swift中的for循环基本使用
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/9073017.html
Copyright © 2011-2022 走看看