Сортировка с ошибкой функтора

Интересно, может ли кто-нибудь помочь мне с этим. Код ниже дает мне эту ошибку:
фатальная ошибка C1903: невозможно восстановить после предыдущей ошибки; остановка компиляции

template <class T>
class CompareList
{
public:

CompareList( const long& lBlobFeature, const bool& bIsAscending )
{
...
}bool operator()( T &lhs, T &rhs )
{

double dFirstValue  = lhs.GetValue( ... );
double dSecondValue = rhs.GetValue( ... );if( m_bIsAscending )   // Sort Ascending.
{
if( dFirstValue < dSecondValue )
return true;
else
return false;
}
else                   // Sort Descending.
{
if( dFirstValue > dSecondValue )
return true;
else
return false;
}
}

};CVParentList     *m_pList;
m_pList = new CVChildList[ nBlobs ]; //CVChildList is a derived class of CVParentList

std::sort( m_pList, m_pList+GetBlobsNumber(), CompareList <CVChildList> ( lBlobFeature, TRUE) );

Редактировать:
Мне очень жаль, на самом деле это первая ошибка:
ошибка C2664: ‘bool CompareList :: operator () (T &, Т &) ‘: невозможно преобразовать параметр 1 из’ CVParentList ‘в’ CVChildList &’

«Неустранимая ошибка C1903: невозможно восстановить после предыдущей ошибки; остановка компиляции» пришла после того, как я увидел только последнее сообщение об ошибке. Так жаль.

1

Решение

Ваш компаратор или ваш динамический список. нужно изменить. Вы можете выбросить часть шаблона компаратора и просто объявить его как компаратор CVParentList:

class CompareList
{
public:
CompareList(long lBlobFeature, bool isAscending);

bool operator()(const CVParentList& left, const CVParentList& right) const
{
bool ans = false;
// your comparison code goes here
return ans;
}
private:
bool m_bIsAscending;
};

и вызвать ваш std :: sort<> как делаешь без аргумент шаблона

std::sort( m_pList, m_pList+GetBlobsNumber(), CompareList( lBlobFeature, TRUE) );

Вы также можете выделить список, отсортировать его, а затем свернуть заголовок списка, когда закончите:

CVParentList *m_pList = new CVChildList[ nBlobs ];
std::sort( (CVChildList *)m_pList, (CVChildList *)m_pList+GetBlobsNumber(), CompareList<CVChildList> ( lBlobFeature, TRUE) );

Но я очень рекомендую первый вариант в вашем случае.

1

Другие решения

Может быть, вам нужно пройти const ссылки на ваш функтор, поскольку сравнение не должно изменять сравниваемые объекты. Компиляторы могут или не могут требовать этого. Измените подпись функтора на

bool operator()(const  T& lhs, const T& rhs );
1

По вопросам рекламы [email protected]