当我的 C++ 代码有 min() 或 max() 调用时,我看到奇怪的错误。我正在使用 Visual C++ 编译器。

有帮助吗?

解决方案

检查您的代码是否包含 窗口.h 头文件,您的代码或其他第三方头文件都有自己的 分钟()/最大限度() 定义。如果是,则在前面加上您的 窗口.h 包含与定义 名义最小最大 像这样:

#define NOMINMAX
#include <windows.h>

其他提示

另一种可能性可能是副作用。大多数最小/最大宏将多次包含参数,并且可能不会达到您的预期。还可能生成错误和警告。

max(a,i++) expands as ((a) > (i++) ? (a) : (i++))

之后 i 要么加 1 要么加 2

展开式中的 () 是为了避免用公式调用时出现问题。尝试扩展 max(a,b+c)

由于 Windows 将其定义为函数样式宏,因此可以使用以下解决方法:

int i = std::min<int>(3,5);

这是有效的,因为宏 min() 仅当 min 接下来是 (, ,而不是当它后面跟着 <.

啊...范围它,伙计: std::min(), std::max().

我已经很多年没有使用它了,但是从内存提升中也分配了最小值和最大值,可能吗?

老实说,当谈到最小/最大时,我发现最好定义我自己的:

#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top