加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 一个封闭函数局部变量不能在lambda体中被引用,除非它在捕获

发布时间:2020-12-16 05:52:40 所属栏目:百科 来源:网络整理
导读:我有json :: value对象,我尝试在一个结构体中获取值,但是我收到关于捕获列表的这个错误.我明白,在这个短语中,这个bracet []保存捕获列表,但我不知道如何.如何在lambda函数中返回值? void JsonDeneme::setValues(json::value obj){ weather.coord.lon = obj.
我有json :: value对象,我尝试在一个结构体中获取值,但是我收到关于捕获列表的这个错误.我明白,在这个短语中,这个bracet []保存捕获列表,但我不知道如何.如何在lambda函数中返回值?
void JsonDeneme::setValues(json::value obj)
{
    weather.coord.lon = obj.at(L"coord").at(L"lon").as_double();
    weather.coord.lat= obj.at(L"coord").at(L"lat").as_double();

}

void JsonDeneme::getHttp()
{
    //json::value val;
    http_client client(U("http://api.openweathermap.org/data/2.5/weather?q=Ankara,TR"));

    client.request(methods::GET)

    .then([](http_response response) -> pplx::task<json::value>
    {

        if (response.status_code() == status_codes::OK)
        {
            printf("Received response status code:%un",response.status_code());
            return response.extract_json();
        }
        return pplx::task_from_result(json::value());
    })

    .then([ ](pplx::task<json::value> previousTask)
    {
        try
        {
            json::value   v = previousTask.get();
            setValues(v);//-----------------------------------------
        }
        catch (http_exception const & e)
        {
            wcout << e.what() << endl;
        }
    })
    .wait();

}

解决方法

捕获列表是您放在方括号之间的.看这个例子:
void foo()
{
    int i = 0;
    []()
    {
        i += 2;
    }
}

在这里,lambda不捕获任何东西,因此它将无法访问封闭的范围,并且不知道我是什么.现在,让我们通过引用来捕捉所有内容:

void foo()
{
    int i = 0;
    [&]()//note the &. It means we are capturing all of the enclosing variables by reference
    {
        i += 2;
    }
    cout << 2;
}

在这个例子中,lambda中的i是在包围范围内对i的引用.

在你的例子中,你在一个对象的成员函数中有一个lambda.你试图调用对象的函数:setValues(v),但是你的捕获列表是空的,所以你的lambda不知道什么是setValues.现在,如果您在lambda中捕获这个,lambda将可以访问所有对象的方法,因为setValues(v)与您的情况下的setValues(v)相同,错误将会消失.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读