'std::filesystem' 在包含 <experimental/filesystem> 后没有被声明
我查了很多关于c++17下文件系统链接的问题,还是不能成功链接.我的 main.cpp
文件如下.
I have checked a lot of issues about the link of filesystem under c++17 and I still cannot make the link successfully. My main.cpp
file is as the following.
#include <experimental/filesystem>
int main(int argc, char** argv)
{
std::string imageDirectory = "./image";;
std::vector<std::string> imagePath;
for (const auto& entry: std::filesystem::directory_iterator(imageDirectory))
{
imagePath.push_back(entry.path());
std::cout << entry.path() << std::endl;
}
return 0;
}
我的 CMakeLists.txt
如下.
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
project(visual_hull LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
add_library(dataIO
STATIC
dataIO.hpp
dataIO.cpp)
find_package(OpenCV REQUIRED core highgui imgproc)
target_link_libraries(dataIO ${OpenCV_LIBS})
add_executable(visual_hull main.cpp)
target_link_libraries(visual_hull PUBLIC dataIO
stdc++fs)
错误如下.
/home/SENSETIME/zhangshunkang/Downloads/programming/c++/visual_hull/main.cpp: In function ‘int main(int, char**)’:
/home/SENSETIME/zhangshunkang/Downloads/programming/c++/visual_hull/main.cpp:15:31: error: ‘std::filesystem’ has not been declared
for (const auto& entry: std::filesystem::directory_iterator(imageDirectory))
^
CMakeFiles/visual_hull.dir/build.make:62: recipe for target 'CMakeFiles/visual_hull.dir/main.cpp.o' failed
make[2]: *** [CMakeFiles/visual_hull.dir/main.cpp.o] Error 1
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/visual_hull.dir/all' failed
make[1]: *** [CMakeFiles/visual_hull.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
推荐答案
您使用 std::filesystem::directory_iterator
.std::filesystem::directory_iterator
和整个命名空间 std::filesystem
在头文件
中声明.
You use std::filesystem::directory_iterator
. std::filesystem::directory_iterator
and the entire namespace std::filesystem
are declared in the header <filesystem>
.
您尚未包含标题
.相反,您包含了
.这个头文件没有声明 std::filesystem::directory_iterator
.相反,它声明了 std::experimental::filesystem::directory_iterator
.
You haven't included the header <filesystem>
. Instead, you've included <experimental/filesystem>
. This header does not declare std::filesystem::directory_iterator
. Instead, it declares std::experimental::filesystem::directory_iterator
.
您可以始终使用标准文件系统库或技术规范中的实验文件系统库,但不得将它们混合在一起.如果您的目标是 C++17,那么您应该使用
.
You can consistently use either the standard filesystem library, or the experimental filesystem library from the technical specification, but you must not mix them together. If you're targeting C++17, then you should use <filesystem>
.
我会得到文件系统的错误:没有这样的文件或目录
I will get the error that filesystem: No such file or directory
理想的解决方案是将编译器升级到对 C++17 提供非实验性支持的版本.否则使用实验性 TS 或 Boost.
The ideal solution is to upgrade your compiler to a version that has non-experimental support for C++17. Otherwise use the experimental TS or Boost.
相关文章