我在构建代码时收到此错误消息,
“已指定具有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?
答案 0 :(得分:6)
问题是,你有lambda有两行,编译器无法确定C ++ 11中的返回类型(所以它等于void)。您可以指定ret。手动输入
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);
});