Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;Visual Studio错误:无法隐式捕获标识符,因为未指定默认捕获模式_C++_Visual Studio_Lambda_Path_Filesystems - Fatal编程技术网

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

C++ C++;Visual Studio错误:无法隐式捕获标识符,因为未指定默认捕获模式,c++,visual-studio,lambda,path,filesystems,C++,Visual Studio,Lambda,Path,Filesystems,我试图在此代码中提取dir_entry.path()的值,并希望将其复制到compFileName中。 问题是我一直收到错误“compFileName无法隐式捕获,因为没有指定默认捕获模式。” 我知道这与lambda函数有关,但我对它们没有任何经验。 关于如何解决这个问题以实现我的目标,有什么建议吗 #include <filesystem> #include <algorithm> namespace fs = std::filesystem; void searc

我试图在此代码中提取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;
    );

}
#包括
#包括
名称空间fs=std::filesystem;
无效搜索(常量fs::路径和目录,常量fs::路径和文件名,字符串和文件名)
{
autod=fs::递归目录迭代器(目录);
自动查找=标准::查找if(d,end(d),[&文件名](const auto&dir\u条目)
{
字符串t=dir_entry.path().filename().string();
compFileName=t;
返回t==文件名;
);
}

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

您可以使用周围范围中定义的
compFileName
,但它没有作为捕获列出

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

[&file_name, &compFileName](const auto & dir_entry) { ... }
更简单的是:捕获所有使用的变量:

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