使用带有函数参数的算法函数max_element

时间:2015-03-22 21:57:33

标签: algorithm functor

通过使用带有3个参数的max_element我遇到了问题: 我的清单

list<T*> myList_;

功能

template<typename T>
T TheObject<T>::bigger () const{
    return *(*(max_element(myList_.begin(), myList_.end(), compare)));
}

template<typename T>
bool TheObject<T>::compare(const T* a, const T* b)
{
    return *a < *b;
}

为什么我有这个错误

  

错误1:&#39; TheObject :: compare&#39;:函数调用缺少的参数   列表;使用&#39;&amp; TheObject :: compare&#39;创建指向成员obj.h的指针

     

错误2:&#39; _FwdIt std :: max_element(_FwdIt,_FwdIt)&#39; :预计2   参数 - 3提供了obj.h

1 个答案:

答案 0 :(得分:0)

您为std::max_element(以及其他标准算法)提供的函数不能是非静态成员函数,因为它不会被称为成员函数。 (std::max_element不知道this可能是什么。)

您收到的第一条错误消息是准确的,但可能会产生误导。因为compare不是一个独立的函数,而是一个非静态成员函数,所以不能将它用作函数指针,只能作为指向成员函数的指针。指向成员函数的指针的语法是&amp; Class :: member。但是,修复无济于事,因为std::max_element无法使用指向成员函数的指针作为其第三个参数。