【问题标题】:Visual Studio Code: using filesystem libraryVisual Studio Code:使用文件系统库
【发布时间】:2021-03-18 01:05:21
【问题描述】:

我正在努力使用 Visual Studio Code 中的文件系统库。我只是不明白为什么它不起作用。我只是使用该库中的示例代码:

#include <fstream>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
 
int main()
{
    fs::create_directories("sandbox/a/b");
    std::ofstream("sandbox/file1.txt");
    std::ofstream("sandbox/file2.txt");
    for(auto& p: fs::directory_iterator("sandbox"))
        std::cout << p.path() << '\n';
    fs::remove_all("sandbox");
}

我收到以下错误:

'filesystem' is not a namespace-name

我已经看过一些关于此的主题,但它们都描述了创建 makefile。我真的不想这样做只是为了了解makefile无法解决的一些基本错误。有没有办法让它简单地使用一些命令? 这个线程: Visual Studio Code: how to add arguments for g++ compiler? 提到一行

g++ -g -o debug main.cpp -std=c++17

所以我认为这是可能的。但是当我输入它时,我得到了大量的错误并且没有任何编译。

出于某种原因,Visual Studio 2019 没有任何问题 - 我最初遇到了一些问题,但通过将 C++ 标准更改为 C++ 17 即可轻松解决。之后,一切都可以构建并正常工作。在 Visual Studio Code 中,我已经开启了 C++ 17,为什么它在这种情况下不起作用?

【问题讨论】:

  • 但是当我输入它时,我得到了很多错误并且没有任何编译。也许问题是你安装的 mingw 版本。
  • 它们都描述了创建 makefile。我真的不想这样做只是为了了解 makefile 无法解决一些基本错误。您可以编辑您的 tasks.json 以添加参数。
  • 感谢您的回复,drescherjm。我会尝试修补json。至于 mingw,我得到了 8.1,我正在阅读:sourceforge.net/p/mingw-w64/bugs/737 这表明 mingw 中有一个错误。我会看看我是否可以遵循该线程的一些建议。
  • 根据您使用的 gcc 版本,您可能需要添加 -lstdc++fs 以链接文件系统库。
  • @Shawn,文件系统手册中提到了这一点。但是,这是什么意思?这是否意味着我应该将此作为参数运行 g++ 命令,使其成为 g++ main.cpp -lstdc++fs 还是在其他地方完成?

标签: c++ gcc visual-studio-code filesystems


【解决方案1】:

感谢大家的意见。我已经解决了这个问题,尽管没有任何实际的解决方案。 MinGW 是我最大的嫌疑人,因为:

  1. 我可以在 Linux 上通过 ssh 进行编译,我的 GCC 版本是 g++ (GCC) 8.3.1 20190311 (Red Hat 8.3.1-3) - 这实际上是我的目标,所以我不需要它在 Windows 上编译它,并且,
  2. 如果我必须为 Windows 编译,我可以通过 Visual Studio 2019 来完成,据我所知,默认情况下不使用 MinGW。

我的 GCC 版本,编译不起作用,是 g++.exe (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0

另外,在 Linux 上,当我输入如下命令时它可以工作:

g++ main.cpp -std=c++17 -lstdc++fs -o main

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2017-09-28
    • 2018-03-07
    • 1970-01-01
    相关资源
    最近更新 更多