You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2019使用std::erase报'erase不是std的成员'错误如何解决?

问题原因及解决方案
  • 首先确认你的VS2019版本:MSVC对C20非成员std::erase/std::erase_if的完整支持是从**Visual Studio 2019 16.11版本(对应编译器版本19.29)**才正式上线的,低于该版本的VS2019即使开启/std:c++latest也没有提供该特性的实现。你可以点击VS菜单栏的「帮助」-「关于Microsoft Visual Studio」查看当前版本号。你能正常使用contains等其他C20特性是因为这类特性的实现上线时间早于std::erase,二者不存在冲突。
  • 如果版本符合要求仍报错,检查项目预处理器定义中是否手动设置了_HAS_CXX20=0,该宏会强制关闭所有C++20特性支持,确保该宏没有被定义或者设置为_HAS_CXX20=1。
  • 临时兼容方案:如果暂时无法升级VS版本,可以用C++20之前通用的erase-remove惯用法替代,代码示例如下:
#include <vector>
#include <algorithm>
int main()
{
  std::vector<int> vec{ 1,2,3 };
  vec.erase(std::remove(vec.begin(), vec.end(), 2), vec.end());
  return 0;
}

内容的提问来源于stack exchange,提问作者cinemarter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:45:02