我正在尝试提取此代码中 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) { ... }
关于C++ Visual Studio 错误 : Identifier cannot be implicitly captured because no default capture mode has been specified,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51401689/