Ошибка второго аргумента конструктора std :: set - PullRequest
1 голос
/ 01 октября 2011

Кодовые блоки вызывают ошибку в этой строке:

set<string,cmpi> m;

Где функция cmpi :

int cmpi(string one , string two )
{
    one = toLowerCase(one); 
    two = toLowerCase(two);

    if(two == one) 
        return 0;
    else 
    if (one < two ) 
        return -1;
    else 
        return 1;
}

Он говорит (ОШИБКА):

type/value mismatch at argument 2 in template parameter list for 'template<class _Key, class _Compare, class _Alloc> class std::set'

Есть что-то с возвращаемым значением моей функции cmpi или это что-то еще?

Ответы [ 2 ]

2 голосов
/ 01 октября 2011

тип / значение несоответствие

Действительно.std::set ожидает тип , а не указатель функции ( значение ):

int cmpi(string one, string two);

typedef int cmpi_t(string one, string two); // the type of cmpi

std::set<string, cmpi_t*> m (&cmpi);
1 голос
/ 01 октября 2011

Второй параметр должен быть типом. Вы можете создать тип для своей функции следующим образом:

struct CmpI {
  bool operator()(const string &a,const string &b) { return cmpi(a,b)<0; }
};
...