不能在使用 make 和 g++ 构建的代码中使用 std::filesystem

Posted

技术标签:

【中文标题】不能在使用 make 和 g++ 构建的代码中使用 std::filesystem【英文标题】:Can't use std::filesystem in code built with make and g++ 【发布时间】:2021-05-01 06:42:40 【问题描述】:

我在使用 make 构建我的 c++ 应用程序时遇到了一些问题。 我有这样的c++代码:

#include <string>
#include <iostream>
#include <filesystem>

using namespace std;

namespace fs = std::filesystem;

int main()

    auto iter = fs::directory_iterator(fs::current_path());
    while(iter._At_end())
    
        cout << iter->path() << endl;
    
    return 0;

我正在尝试使用以下命令编译目标文件: g++-9 -std=c++17 -Wall -Wextra -pthread -lstdc++fs -c -o main.o main.cpp 但我有这个错误:

main.cpp:12:16: error: ‘class std::filesystem::__cxx11::directory_iterator’ has no member named ‘_At_end’
   12 |     while(iter._At_end())
      |                ^~~~~~~

所以,我不能使用 std::filesystem 命名空间的类的成员,但如果我只想使用类(例如 std::filesystem::path),那么一切正常。

软的版本:

g++-9 (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
GNU Make 4.2.1

希望你能帮助我。

【问题讨论】:

_At_end 不是标准库的一部分。为什么你认为你可以使用它? 安装g++-10 包并查看this C++ reference 好吧,我看到它在 MSVC 编译器上被唤醒了。是不是表示g++不支持这种方式? 【参考方案1】:

不要使用_At_end(),一切都会好起来的。

【讨论】:

以上是关于不能在使用 make 和 g++ 构建的代码中使用 std::filesystem的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义构建的 gcc(g++) 构建 c++ 项目

Linux编译器-gcc/g++使用及项目自动化构建工具-make/Makefile

Linux编译器-gcc/g++使用及项目自动化构建工具-make/Makefile

QT make 在构建时有很大的输出

Linuxgcc/g++编译器make/Makefile自动化构建工具

make工程管理器