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
相关产品推荐
相关产品推荐

