2015-07-24 2 views
1

Я получаю сообщение об ошибке, когда я строю свой код,лямбда-функция метания ошибка

«лямбда, которое было указано, чтобы иметь тип возвращаемого недействительным не может возвращать значение»

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

Похоже, вы пытались указать тип возврата '-> bool' как обходной путь? – Jarod42

+0

Я только что отредактировал код. будет ли он работать в VS2013? – Nic

ответ

6

Проблема в том, что у вас есть лямбда с двумя строками, и компилятор не может определить тип возвращаемого значения (поэтому он равен void) в C++ 11. Вы можете указать 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); 
}); 
+0

Помог ли C++ 14? –

+0

@LightnessRacesinOrbit cppreference.com говорит, что тип возвращаемого значения выводится из операторов return, как если бы для функции, тип возвращаемой которой объявляется автоматически. начиная с C++ 14. – ForEveR

Смежные вопросы