VS2019调用std::minmax_element报C2039、C3861错误如何解决
问题根因
你遇到的编译报错是头文件包含顺序错误导致的:
VS项目开启预编译头功能时,编译器会直接忽略所有写在#include "pch.h"之前的头文件。你将#include <algorithm>放在了pch.h的引入语句之前,实际编译时相当于没有引入algorithm头文件,才会提示minmax_element不属于std命名空间。IntelliSense的识别逻辑和实际编译逻辑不同,不会受预编译头规则限制,所以才会出现能跳转定义、但编译不通过的不一致现象。
修复方案
调整头文件包含顺序,将#include <algorithm>移到#include "pch.h"之后即可,修改后的开头部分代码如下:
#include "pch.h" #include <algorithm> #include "CppUnitTest.h" #include "Playbook.h" #include "PlaySim.h"
额外排查步骤
如果调整顺序后仍有报错,可按以下步骤验证配置:
- 打开项目属性→C/C→语言,确认项目使用的C标准不低于C11,
std::minmax_element是C11版本新增的标准库函数 - 清理项目后重新执行生成操作,排除旧编译缓存的影响
内容的提问来源于stack exchange,提问作者Andy K
相关产品推荐
相关产品推荐

