如何解决文件系统包含的 CLion 问题?
How can I fix CLion problem with filesystem inlcude?
我使用 CLion 作为我的 IDE。我使用 C++17 标准创建项目。
我有下面的代码片段:
#include <filesystem>
namespace fs = std::filesystem;
std::vector<std::string> getFilesArray() {
auto dir = ".";
std::vector<std::string> filesList;
for (auto item : fs::recursive_directory_iterator(dir))
{
if (!fs::is_regular_file(item.path()) || item.path().extension() != ".cpp" && item.path().extension() != ".h" && item.path().extension() != ".hpp")
continue;
filesList.push_back(item.path().string());
}
return filesList;
}
当我尝试编译项目时,出现了很多错误,例如:
C:/PROGRA~2/MINGW-~1/I686-8~1.0-P/mingw32/lib/gcc/i686-w64-mingw32/8.1.0/include/c++/bits/fs_path.h: In member function 'std::filesystem::__cxx11::path& std::filesystem::__cxx11::path::operator/=(const std::filesystem::__cxx11::path&)':
C:/PROGRA~2/MINGW-~1/I686-8~1.0-P/mingw32/lib/gcc/i686-w64-mingw32/8.1.0/include/c++/bits/fs_path.h:237:47: error: no match for 'operator!=' (operand types are 'std::filesystem::__cxx11::path' and 'std::filesystem::__cxx11::path')
|| (__p.has_root_name() && __p.root_name() != root_name()))
我的 Cmake 文件是:
cmake_minimum_required(VERSION 3.15)
project(FinalParser)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "-std=c++17 -lc++fs")
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(FinalParser main.cpp Parse/Parser.cpp Parse/Parser.cpp Parse/Parser.h files.h Graph/Parser.cpp Graph/Parser.h)
target_link_libraries(FinalParser stdc++fs)
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/Users/user/Desktop/boost_1_71_0")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/Users/user/Desktop/boost_1_71_0/libs")
FIND_PACKAGE(Boost)
IF (Boost_FOUND)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
ADD_DEFINITIONS( "-DHAS_BOOST" )
ENDIF()
我该如何解决?
因此,我将为您提供针对此类似错误的完整证明解决方案,当有人尝试使用 STL 头文件时也会出现该错误 #include
因此,出现此错误是因为您当前使用的是 GCC 版本 8.2.0,这是 MinGW 网站上的默认版本。要解决这个问题你需要更新到 GCC 10.2.0
以下是您需要遵循的步骤:-
- 从 https://www.msys2.org/
下载并安装 Msys2
- 运行 或启动它并输入 pacman -Syu 并按回车,然后它会要求您输入 Y/N 继续,只需输入回车而不按 Y/n。
- 关闭它并再次启动 msys2 并再次键入相同的命令,直到它显示无关或无需更新。
- 为了做同样的事情,我还分享了一个 link 的 YouTube 视频。
https://www.youtube.com/watch?v=aXF4A5UeSeM&
5。要检查您是否已成功安装 GCC 10.2.0,只需打开 cmd 并输入 GCC --version 并在显示 10.2.0 时按回车键,你已经安装好了,等等,这还没有结束。
6. 现在卸载 Clion 或您正在使用的任何 IDE。
7. 在重新安装之前,您需要删除程序文件文件夹(名称 Jetbrains)中显示的一些剩余 Jetbrains 转储文件。删除该文件夹并重新安装。
8. 现在 select Msys2/MingW-64,而不是安装时系统中已有的上一个(正常 MinGW)。
9.现在你可以去你的添加或删除程序部分,可以删除那个浪费正常的MinGW-64,而不是msys2(不要删除msys2)只删除ming64之前的一个。
10.现在你可以享受运行那个性感的stl库了,不会有任何错误。
不过,如果您在执行这些步骤时遇到任何问题,请在评论中问我。
我使用 CLion 作为我的 IDE。我使用 C++17 标准创建项目。 我有下面的代码片段:
#include <filesystem>
namespace fs = std::filesystem;
std::vector<std::string> getFilesArray() {
auto dir = ".";
std::vector<std::string> filesList;
for (auto item : fs::recursive_directory_iterator(dir))
{
if (!fs::is_regular_file(item.path()) || item.path().extension() != ".cpp" && item.path().extension() != ".h" && item.path().extension() != ".hpp")
continue;
filesList.push_back(item.path().string());
}
return filesList;
}
当我尝试编译项目时,出现了很多错误,例如:
C:/PROGRA~2/MINGW-~1/I686-8~1.0-P/mingw32/lib/gcc/i686-w64-mingw32/8.1.0/include/c++/bits/fs_path.h: In member function 'std::filesystem::__cxx11::path& std::filesystem::__cxx11::path::operator/=(const std::filesystem::__cxx11::path&)':
C:/PROGRA~2/MINGW-~1/I686-8~1.0-P/mingw32/lib/gcc/i686-w64-mingw32/8.1.0/include/c++/bits/fs_path.h:237:47: error: no match for 'operator!=' (operand types are 'std::filesystem::__cxx11::path' and 'std::filesystem::__cxx11::path')
|| (__p.has_root_name() && __p.root_name() != root_name()))
我的 Cmake 文件是:
cmake_minimum_required(VERSION 3.15)
project(FinalParser)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "-std=c++17 -lc++fs")
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(FinalParser main.cpp Parse/Parser.cpp Parse/Parser.cpp Parse/Parser.h files.h Graph/Parser.cpp Graph/Parser.h)
target_link_libraries(FinalParser stdc++fs)
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/Users/user/Desktop/boost_1_71_0")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/Users/user/Desktop/boost_1_71_0/libs")
FIND_PACKAGE(Boost)
IF (Boost_FOUND)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
ADD_DEFINITIONS( "-DHAS_BOOST" )
ENDIF()
我该如何解决?
因此,我将为您提供针对此类似错误的完整证明解决方案,当有人尝试使用 STL 头文件时也会出现该错误 #include
因此,出现此错误是因为您当前使用的是 GCC 版本 8.2.0,这是 MinGW 网站上的默认版本。要解决这个问题你需要更新到 GCC 10.2.0
以下是您需要遵循的步骤:-
- 从 https://www.msys2.org/ 下载并安装 Msys2
- 运行 或启动它并输入 pacman -Syu 并按回车,然后它会要求您输入 Y/N 继续,只需输入回车而不按 Y/n。
- 关闭它并再次启动 msys2 并再次键入相同的命令,直到它显示无关或无需更新。
- 为了做同样的事情,我还分享了一个 link 的 YouTube 视频。 https://www.youtube.com/watch?v=aXF4A5UeSeM&
5。要检查您是否已成功安装 GCC 10.2.0,只需打开 cmd 并输入 GCC --version 并在显示 10.2.0 时按回车键,你已经安装好了,等等,这还没有结束。 6. 现在卸载 Clion 或您正在使用的任何 IDE。 7. 在重新安装之前,您需要删除程序文件文件夹(名称 Jetbrains)中显示的一些剩余 Jetbrains 转储文件。删除该文件夹并重新安装。 8. 现在 select Msys2/MingW-64,而不是安装时系统中已有的上一个(正常 MinGW)。 9.现在你可以去你的添加或删除程序部分,可以删除那个浪费正常的MinGW-64,而不是msys2(不要删除msys2)只删除ming64之前的一个。 10.现在你可以享受运行那个性感的stl库了,不会有任何错误。
不过,如果您在执行这些步骤时遇到任何问题,请在评论中问我。