C++ Visual Studio error: Identifier cannot be implicitly captured because no default capture mode has been specified

C++ Visual Studio error: Identifier cannot be implicitly captured because no default capture mode has been specified

我正在尝试提取此代码中 dir_entry.path() 的值并想将其复制到 compFileName 中。 问题是我一直收到错误“compFileName cannot be implicitly capture because no default capture mode have been specified.

我知道它与 lambda 函数有关,但我对它们的经验为零。 关于我应该如何解决这个问题以实现我想要的,有什么建议吗?

#include <filesystem>
#include <algorithm>

namespace fs = std::filesystem;

void search(const fs::path& directory, const fs::path& file_name, string &compFileName)
{
    auto d = fs::recursive_directory_iterator(directory);

    auto found = std::find_if(d, end(d), [&file_name](const auto & dir_entry)
    {
        string t = dir_entry.path().filename().string();
        compFileName = t;
        return t == file_name;
    );

}

除非捕获它们,否则不能在 lambda 中使用周围变量。

您使用了在周围范围内定义的 compFileName,但未将其列为捕获。

简单修复:将 &compFileName 添加到您的捕获列表:

[&file_name, &compFileName](const auto & dir_entry) { ... }

更简单:捕获所有个使用的变量:

[&](const auto & dir_entry) { ... }