【问题标题】:Visual Studio 2019 C++ and std::filesystemVisual Studio 2019 C++ 和 std::filesystem
【发布时间】:2020-09-27 02:29:32
【问题描述】:

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

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

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

【问题讨论】:

标签: c++ visual-studio c++17 visual-studio-2019


【解决方案1】:

为了完整性和人们将来搜索此内容。

要在 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::filesystem 的所有外观更改为std::filesystem
  4. 修复possible differences between the experimental and final filesystem 版本

【讨论】:

  • 这样还是不行。即使在应用了上述所有步骤的默认控制台“Hello World”项目中。
  • @Amphyby 你能详细说明一下吗?
  • 我在新创建的项目中的 VS 2019 Community 16.7.3 中遇到了这个问题。似乎在此版本中由于某种原因未设置 _HAS_CXX17 并应用了 #1 步骤。
  • @drescherjm 我无法重现该问题。版本 16.9.3 Community 甚至在从 Visual Studio 2019 Releases 安装版本 16.7.3 Professional 之后也没有。 _HAS_CXX17 已定义,一个简单的示例代码 int main(int argc, char* argv) { std::cout << _HAS_CXX17 << ":" << std::filesystem::current_path().u8string().c_str(); return 0; } 编译并按预期工作。注意,你说的是2020年11月的版本,可以试试当前版本16.9.3。
  • 感谢您的尝试。
【解决方案2】:

对于所有在将现有 Visual Studio 2017 项目移植到 Visual Studio 2019 中遇到困难的人来说,进行适当的项目设置并无济于事: 在文件 VC\Tools\MSVC\14.26.28801\include\filesystem 有:

#if !_HAS_CXX17

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

 #define _HAS_CXX17 1
#include <filesystem>

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

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

<LanguageStandard>stdcpplatest</LanguageStandard>
<AdditionalOptions>/std:c++14 %(AdditionalOptions)</AdditionalOptions>

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

【讨论】:

  • 在另一个系统上它没有做到这一点,并且在“文件系统”本身中报告了更多错误,这肯定是与项目设置有关的东西,应该由 VS 以正确的方式处理......
  • Visual Studio 的定义确实存在一些问题。即使Microsoft claims to have fixed it,我的测试仍然给我定义__cplusplus 的值199711 ...但是,它也可能是配置错误或某些代码阻止定义_HAS_CXX17(在vcruntime.h) 被正确定义。您可以在项目中搜索 __cluplus 和 _HAS_CXX17 等内容。
  • 附加选项可以在项目设置->配置属性->C/C++->命令行->附加选项中找到
  • 不应该设置_HAS_CXX17,应该由/std:控制
  • 我也有问题,使用 VS2019,_HAS_CXX17 工作正常,突然 VS 在配置中找不到它更改为 cpp 17 并且仍然出现错误
【解决方案3】:

尽管选择了 C++17 语言,但我在 2019 版本(Microsoft Visual Studio Community 2019 版本 16.6.0)中遇到了同样的问题 [包括文件系统]。

我必须在配置窗口中明确地将平台和活动解决方案平台更改为 x64(不过,我从 x64 开始)。这样,错误就消失了。

【讨论】:

    【解决方案4】:

    如果您还没有更新您的 Visual C++ 可再发行组件,则必须进行更新。然后在项目属性 > 配置属性 > C++ 语言标准下:选择 C++17 或更高版本。 您可以尝试将其设置为默认值。看到这个:How to change default C++ language standard in Visual Studio 2019?

    【讨论】:

      【解决方案5】:

      正确的解决方法是: 对于 Xcode:

      1. 转到项目属性
      2. 在构建设置下,向下滚动到 Apple Clang- Language- c++。
      3. 您必须选择 c++ 语言方言并将其设置为 C++17[-std=c++17]。

      干杯 辛格

      【讨论】:

        猜你喜欢
        • 2019-02-27
        • 2020-11-07
        • 2022-09-23
        • 1970-01-01
        • 2020-05-17
        • 2019-06-07
        • 1970-01-01
        • 1970-01-01
        • 2021-10-04
        相关资源
        最近更新 更多