小编Mia*_*ami的帖子

对文件系统路径向量进行排序时,“尝试取消引用过去的迭代器”

我正在使用std :: filesystem编写一个简单的文件选择器。当前目录的条目存储在向量中。当我尝试使用std :: sort对向量进行排序时,程序崩溃。

在Ubuntu 19.04上使用g ++-9会发生这种情况。该文件是使用-D_GLIBCXX_DEBUG和-D_GLIBCXX_DEBUG_PEDANTIC调试标志编译的。

相关代码如下:

#include <filesystem>
#include <vector>
#include <algorithm>

namespace fs = std::filesystem;

struct FileBrowser {
    std::vector<fs::path> files;

    FileBrowser() {
        UpdateFiles();
    }

    void UpdateFiles() {
        files.clear();
        for (const auto& entry : fs::directory_iterator(currentPath)) {
            files.push_back(entry.path());
        }


        std::sort(files.begin(), files.end(), [](const auto& lhs, const auto& rhs) {
            if (fs::is_directory(lhs) && !fs::is_directory(rhs)) {
                return 1;
            } else if (fs::is_directory(rhs) && !fs::is_directory(lhs)) {
                return 0;
            } else {
                return lhs.filename().string().compare(rhs.filename().string());
            }
        });
    }
};
Run Code Online (Sandbox Code Playgroud)

错误消息如下所示:

/usr/include/c++/9/debug/safe_iterator.h:294:
In function:
    __gnu_debug::_Safe_iterator<_Iterator, …
Run Code Online (Sandbox Code Playgroud)

c++ sorting dereference c++17 std-filesystem

2
推荐指数
1
解决办法
114
查看次数

标签 统计

c++ ×1

c++17 ×1

dereference ×1

sorting ×1

std-filesystem ×1