现在,我没想到的是,升级到一个“新”的编译器版本之后。
在VS2017中,可以通过std::experimental::filesystem访问std::filesystem。但是,现在升级到VS2019后,令我惊讶的是它根本不可用。在std::experimental和std::filesystem中都找不到。
是的,我已经尝试从项目设置中设置了c++17甚至是“最新的草案”,有什么想法吗?
现在,我没想到的是,升级到一个“新”的编译器版本之后。
在VS2017中,可以通过std::experimental::filesystem访问std::filesystem。但是,现在升级到VS2019后,令我惊讶的是它根本不可用。在std::experimental和std::filesystem中都找不到。
是的,我已经尝试从项目设置中设置了c++17甚至是“最新的草案”,有什么想法吗?
#include <experimental/filesystem>
更改为#include <filesystem>
3. 在源代码中将所有出现的std::experimental::filesystem
替换为std::filesystem
4. 修复可能存在的实验版本和最终版本文件系统之间的差异。_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。 - user1810087对于那些试图将现有的 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>
__cplusplus
的定义值... 然而,这也可能是配置错误或某些代码阻止了 define _HAS_CXX17
(在 vcruntime.h 中找到)正确定义。您可以搜索您的项目,查找类似 __cpluplus 和 _HAS_CXX17 的内容。 - user1810087/std:
控制。 - Billy ONeal尽管选择了C++17语言,但我在2019版本(Microsoft Visual Studio Community 2019 Version 16.6.0)中遇到了与“include filesystem”相同的问题。
我不得不在配置窗口中显式更改平台和活动解决方案平台为x64(虽然一开始我就选择了x64)。这样,错误就消失了。
如果您还没有更新Visual C++可再发行组件,则需要进行更新。然后,在项目属性下,选择“配置属性”>“C++语言标准”,选择C++17或更高版本。 您可以尝试将其默认设置为该版本。请参见:如何在Visual Studio 2019中更改默认的C++语言标准?
对此的正确解决方案是: 对于Xcode:
祝好 辛格