不能在使用 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的主要内容,如果未能解决你的问题,请参考以下文章
Linux编译器-gcc/g++使用及项目自动化构建工具-make/Makefile
Linux编译器-gcc/g++使用及项目自动化构建工具-make/Makefile