Lambda函数抛出错误

lambda function throwing error

本文关键字:错误 出错 函数 Lambda      更新时间:2023-10-16

我得到这个错误信息,当我构建我的代码,

"指定为void返回类型的lambda不能返回值"

bool StockCheck::InStock(const Shop& shop) const
{
    return std::any_of(m_products, [&shop, this](const std::unique_ptr<SelectedProduct>& selected)
    {
        auto inStock = selected->ProductInStock(shop);
        return inStock != SelectedProduct::NOT_IN_STOCK && selected->GetProductInStock(code);
    });
}

我正在使用VS2010,这是一个问题吗?这将工作在VS2013?

问题是,在c++ 11中,lambda只有两行,编译器无法确定返回类型(因此它等于void)。您可以像

那样手动指定ret. type。
return std::any_of(m_products.begin(), m_products.end(),
[&shop, this](const std::unique_ptr<SelectedProduct>& selected) -> bool
{
    auto inStock = selected->ProductInStock(shop);
    return inStock != SelectedProduct::NOT_IN_STOCK && selected->GetProductInStock(code);
});

或者不带变量inStock只写一行

return std::any_of(m_products.begin(), m_products.end(),
[&shop, this](const std::unique_ptr<SelectedProduct>& selected)
{
    return selected->ProductInStock(shop) != SelectedProduct::NOT_IN_STOCK &&
    selected->GetProductInStock(code);
});
相关文章: