Visual Studio 2019 C++ 和 std::filesystem

Veg*_*ga4 4 c++ visual-studio c++17 visual-studio-2019

现在,在“升级”到“更新”版本的编译器之后,我没想到会这样。

在 VS2017 中 std::filesystem 可通过 std::experimental::filesystem 获得,现在升级到 VS2019 后令我惊讶的是它根本不可用。不在 std::experimental 或 std::filesystem 中。

是的,我已经尝试从项目的设置中设置 c++17,甚至是“最新草案”的东西,有什么想法吗?

use*_*087 15

为了完整性和人们在未来搜索这个。

要在 Visual Studio 中切换到 C++17' std::filesystem(无论 VS2019 还是 VS2017),您需要:

  1. 项目属性 -> 配置属性 -> C/C++ -> 语言 -> C++ 语言标准中的语言标准更改为至少ISO C++17 标准 (/std:c++17)
    (也可以在项目属性中找到)-> 配置属性 -> 常规 -> C++ 语言标准)
  2. 更改#include <experimental/filesystem>#include <filesystem>
  3. 将源代码中的所有外观更改std::experimental::filesystemstd::filesystem
  4. 修复实验文件系统版本和最终文件系统版本之间可能存在的差异

  • 这样还是不行。即使在应用了所有上述步骤的默认控制台“Hello World”项目中也是如此。 (3认同)

Veg*_*ga4 7

对于那些努力将现有 Visual Studio 2017 项目移植到 Visual Studio 2019 的人来说,拥有正确的项目设置并无济于事:在文件 VC\Tools\MSVC\14.26.28801\include\filesystem 中有:

#if !_HAS_CXX17

现在,我不知道为什么在更改项目设置时不会自动设置此标志。因此我用过:

 #define _HAS_CXX17 1
#include <filesystem>
Run Code Online (Sandbox Code Playgroud)

在我的文件中作为解决方法。工作正常。

更新:在另一个系统上,项目文件内有

<LanguageStandard>stdcpplatest</LanguageStandard>
<AdditionalOptions>/std:c++14 %(AdditionalOptions)</AdditionalOptions>
Run Code Online (Sandbox Code Playgroud)

后一行导致了问题(显然)。切换更高级别的项目设置不会删除此类可选设置(显然)。

  • 我也有一个问题,使用VS2019,_HAS_CXX17正在工作,突然VS找不到它在配置中更改为cpp 17并且仍然收到错误 (3认同)
  • Visual Studio 的定义确实存在一些问题。即使[微软声称已经修复了它](https://devblogs.microsoft.com/cppblog/msvc-now- Correctly-reports-__cplusplus/),我的测试仍然给我定义的值 **199711** `__cplusplus` ...但是,它也可能是配置错误或某些代码阻止正确定义`_HAS_CXX17`(在 **vcruntime.h** 中找到)。您可以在项目中搜索 __cluplus 和 _HAS_CXX17 等内容。 (2认同)
  • 不应该设置 _HAS_CXX17,它应该由“/std:”控制 (2认同)