包含windows.h会导致错误

Including windows.h causes an error

本文关键字:错误 windows 包含      更新时间:2023-10-16

这很奇怪,我有一个我一直在构建的类,目前我在我的文件顶部有这个:

#pragma once
#include <cstdint>
#include <cstring>
#include <string>
#include <limits>

现在我需要将windows.h添加到混合中,但一旦我这样做,我就会在这行上得到"错误:期望一个标识符":

inline uint32_t Hash2(std::string &Key) {
    return (MurMur3::x86_32(Key.c_str(), Key.size(), 2) % (std::numeric_limits<uint32_t>::max() - 1)) + 1;
}

的红线出现在::max下面。至于函数本身,它应该使用murmur3来获得一个不为0的哈希值。

如果我删除

std::numeric_limits<uint32_t>::max()
并将其替换为常量4294967295

然后它又可以正常工作了。

我不明白为什么会发生这种事。有人知道吗?

Windows.h有一个在其中定义宏的坏习惯。特别地,它定义了最小和最大。你需要取消这些