C++的VS错误:提供std::experimental::filesystem的< experimental/filesystem>标头已被Microsoft弃用,将被删除

wtlkbnrh  于 2023-05-19  发布在  其他
关注(0)|答案(6)|浏览(387)

我在Visual Studio(Windows 10)上用**C++**编写代码,得到了以下错误:

#error The <experimental/filesystem> header providing std::experimental::filesystem is deprecated by Microsoft \
and will be REMOVED. It is superseded by the C++17 <filesystem> header providing std::filesystem. \
You can define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING to acknowledge that you have received this warning.

使用此标题:

#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
#include <filesystem>//If I will disable it nothing happens.

#include <experimental/filesystem> //If I will disable it happens another error.
namespace fs = std::experimental::filesystem; 

using namespace std;

我已经在主cpp文件中尝试了:#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING。它没有帮助。
然后我从here中粘贴以下代码:

#ifdef __cpp_lib_filesystem
    #include <filesystem>
    using fs = std::filesystem;
#elif __cpp_lib_experimental_filesystem
    #include <experimental/filesystem>
    using fs = std::experimental::filesystem;
#else
    #error "no filesystem support ='("
#endif

也没什么用。
什么是最简单的方法来摆脱这个错误?

dbf7pr2w

dbf7pr2w1#

将_SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING添加到预处理器定义中。
项目->属性-> C/C++ ->预处理器->预处理器定义。
这为我解决了问题。

nkkqxpd9

nkkqxpd92#

根据link
支持C++17。这是一个全新的实现,与以前的std::实验版本不兼容,需要符号链接支持,bug修复和标准要求行为的更改。目前,including提供了新的std::filesystem和以前的std::experimental::filesystem,而including只提供了旧的实验性实现。实验性的实现将在下一个破坏ABI的库版本中被删除。
MS在文件系统中放弃了“实验性”。
您可以尝试使用#include <filesystem>而不是#include <experimental/filesystem>,并且std::experimental::filesystem将被删除,这意味着您应该使用std::filesystem

ojsjcaue

ojsjcaue3#

我遇到了同样的问题,然后,当我删除实验文件系统并添加:

#include <filesystem>
namespace fs = std::filesystem;

我会得到错误:
命名空间“std”没有成员“filesystem”
解决方案是转到项目属性并按照链接中的指示进行操作。VS2017: E0135 namespace "std" has no member "filesystem"

jhdbpxl9

jhdbpxl94#

在必要的地方添加定义对我来说很有用:

#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING 1;

#ifdef __cpp_lib_filesystem
    #include <filesystem>
    namespace fs = std::filesystem;
#elif __cpp_lib_experimental_filesystem
    #define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING 1;
    #include <experimental/filesystem>
    namespace fs = std::experimental::filesystem;
#else
    #error "no filesystem support ='("
#endif
3lxsmp7m

3lxsmp7m5#

我已经研究这个问题几个星期了,我正在虚幻引擎4项目上使用Visual Studio 2019。在visual studio中启用c++17头文件并使其工作是很困难的。网上很多人建议使用boost库,但这是我使用文件系统的尝试,因为我不想处理试图下载/导入外部库的问题,所以这里是我所知道的......

在Visual Studio中开始编码之前,您应该构建/编译您的项目,并查看Visual Studio是否需要设置任何内容;对我来说,我不得不下载/设置一个免费的许可证与Incredibuild(有教程在线,如果有人需要得到这个设置)。Incredibuild对于在Visual Studio中构建项目是有帮助和必要的(至少如果您使用虚幻引擎4),但有时我会在Visual Studio中获得1或2个“错误”,但会在虚幻引擎4中编译,因为这些错误实际上不是错误(人们在网上说Incredibuild很奇怪,并想提到这一点)

1)如何启用C17头文件
当尝试#include(这是c
版本17的头文件)时,需要启用c17:在visual studio的“解决方案资源管理器”中查看项目文件,然后右键单击项目本身并打开“属性”。转到“C/ C ”选项卡,并将版本切换到c17(这很容易在网上找到)。除非你正在做一个虚幻引擎项目,因为没有“C/ C ”选项卡,否则请找到“NMake”选项卡,并在“Addition Options”右侧的文本框中键入:
/std:c17或/std:clatest(Microsoft有一个我在网上找到的其他列表,但这些都很好)
并且Visual Studio将识别为报头。
2)如何让C++17命名空间工作(我试过的事情)
在头文件开始工作之后,你可以尝试最终创建一个命名空间变量:
std::filesystem;=>错误:'std没有命名空间或类文件系统'
或者如果你也有#include,你可以试试:
std::experimental::filesystem; OR namespace fs = std::experimental::filesystem::v1;=>错误:'我们希望您定义_SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING'

  • 如何纠正这些错误?

在网上,我发现将这些代码行添加到您的ProjectName.Build.cs文件(在“解决方案资源管理器”中单击该文件后可以找到并编辑该文件),而不是PCHUsage的原始声明:
PCHUsage = PCHUsageMode. NoSharedPCH; privatePCHHeaderFile =“Folder.h”; CppStandard = CppStandardVersion.Cpp17;
这确实消除了使用std::filesystem时的错误,但却导致了更多的问题,而且似乎是有害的。在浏览了其他网站/可能的解决方案后,网上的人似乎不知道如何实际使用visual studio中的文件系统库,我已经找了几个星期的工作代码。
如果你想尝试使用std::experimental::filesystem或std::experimental::filesystem::v1,我尝试了#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING,但没有成功。
我和你在同一条船上,看起来你没有从前面的评论中得到太多帮助。如果我们在网上找不到解决方案/视频教程,我有一个B计划。也许我们可以尝试使用一些不同的软件编写一个c17项目,或者我们可以使用不同的软件编写一个程序,而不是在Visual Studio中启用c17;例如,如果你想列出目录中的文件,在你喜欢的其他软件中创建一个可执行文件,然后从你的visual studio项目中启动该可执行文件/提供它参数。这是最好的我得到的男人。我希望这能激发一些创造力或其他什么,但我认为这比我在网上看到的更有帮助。祝你好运!我也需要这样的运气

blmhpbnm

blmhpbnm6#

你应该把宏定义“#define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING”放在#include <experimental/filesystem>之前,像这样:

#define _LIBCPP_NO_EXPERIMENTAL_DEPRECATION_WARNING_FILESYSTEM
#include <experimental/filesystem>

它在我的项目中起作用。

相关问题