为什么我在 C++ 中开始出现“max”:未找到标识符错误?

And*_*raz 1 c++

我最近开始收到此错误。这部分代码工作正常,但在对项目的其他(大部分不相关)部分进行较大更改后突然停止工作。

我已经包含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)修复了问题,但仍然想知道为什么之前的代码突然停止工作。

MSa*_*ers 5

Windows.h包含一个#ifndef NOMINMAX可防止<algorithm>中断的std::max.

使用宏已经够糟糕的了,但max它是小写的。非常强烈的共识是任何宏都应该全部大写,例如MAX。微软试图避免破坏现有的代码,因此尽管它带来了问题,但他们还没有将其max删除。windows.h但您可以而且应该自己删除它。一种常见的方法是#define NOMINMAX在 中stdafx.hpch.h之前#include <windows.h>,它修复了所有使用预编译头的源文件。但您也可以使用.vcxproj.props文件来实现此目的。

想必您团队中的某人最近在某处添加了此定义。唯一的问题应该是,为什么现在才出现?