Lambda函数中的max_element

Tim*_*rks 5 c++ lambda max

我实现了此功能,但仍然出现以下错误,我无法弄清原因。

/usr/include/c++/4.8/bits/stl_algo.h:6325: error: no match for call to '(Farm::killHeaviestAnimalOnFarm()::__lambda0) (Animal*&, Animal*&)' if (__comp(*__result, *__first)) ^
Run Code Online (Sandbox Code Playgroud)

我在互联网上搜索了一些示例,但看不到我和我之间有什么区别。

我的.cpp文件具有以下killHeaviestAnimalOnFarm

Animal *Farm::killHeaviestAnimalOnFarm()
{
    auto minmax_widths = std::max_element(animals.begin(), animals.end(),
            [] (Animal const& lhs, Animal const& rhs) {
                return lhs.getWeight() < rhs.getWeight();
            });
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*phe 6

如果animals是,vector<Animal*> 则将您的lambda函数更改为:

       auto minmax_widths = std::max_element(animals.begin(), animals.end(),
            [] (Animal const * lhs, Animal const * rhs) {
            return lhs->getWeight() < rhs->getWeight();
    });
Run Code Online (Sandbox Code Playgroud)

另一种方法是让animals一个vector<Animal>在这种情况下,你的拉姆达的工作不变。