我最近开始收到此错误。这部分代码工作正常,但在对项目的其他(大部分不相关)部分进行较大更改后突然停止工作。
我已经包含windows.h并包含了两者stdlb.h,并且还尝试手动定义它,但仍然出现错误。请注意,ctrl+ right clickonmax()在 Visual Studio 中找到 3 个匹配项(我的定义、stdlib 和 minwindef),但不会跳转到一个。
#define max(a, b) (((a) > (b)) ? (a) : (b))
我的代码看起来像这样
#define MYMAX(a, b) max(a, b)
...
return MYMAX(indexa, indexb);
...
Run Code Online (Sandbox Code Playgroud)
使用std::max(indexa, indexb)修复了问题,但仍然想知道为什么之前的代码突然停止工作。
Windows.h包含一个#ifndef NOMINMAX可防止<algorithm>中断的std::max.
使用宏已经够糟糕的了,但max它是小写的。非常强烈的共识是任何宏都应该全部大写,例如MAX。微软试图避免破坏现有的代码,因此尽管它带来了问题,但他们还没有将其max删除。windows.h但您可以而且应该自己删除它。一种常见的方法是#define NOMINMAX在 中stdafx.h或pch.h之前#include <windows.h>,它修复了所有使用预编译头的源文件。但您也可以使用.vcxproj或.props文件来实现此目的。
想必您团队中的某人最近在某处添加了此定义。唯一的问题应该是,为什么现在才出现?