C ++ Visual Studio错误:无法隐式捕获标识符,因为未指定默认捕获模式

时间:2018-07-18 12:10:08

标签: c++ visual-studio lambda path filesystems

我试图在此代码中提取dir_entry.path()的值,并将其复制到compFileName中。 问题是我一直收到错误消息,因为未指定默认捕获模式,因此无法隐式捕获compFileName。

我知道它与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;
    );

}

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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