我试图在此代码中提取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;
);
}
答案 0 :(得分:1)
除非捕获它们,否则不能在lambda中使用周围的变量。
您使用在周围范围中定义的compFileName
,但未将其列为捕获。
简单修复:将&compFileName
添加到您的捕获列表中:
[&file_name, &compFileName](const auto & dir_entry) { ... }
更简单:捕获所有个使用过的变量:
[&](const auto & dir_entry) { ... }