Ошибка компиляции с функцией сравнения, сортировка C ++ - PullRequest
2 голосов
/ 14 января 2012

Я написал себе функцию сравнения для sort (). Это хорошо сработало, когда я так выразился.

bool comp(string a, string b)
{
    ...;
}

int main()
{
    sort(...,...,comp);
}

Однако, когда я помещаю все это в класс, говорю:

class Test {

public:
    bool comp(string a,string b)
    {
        ...;
    }
    vector <string> CustomSort(vector <string> str) {
        sort(...,...,comp);
    }
};

Произошла ошибка компиляции "Нет подходящей функции для вызова 'sort ......'.

Почему это случилось?

1 Ответ

6 голосов
/ 14 января 2012

Любая нестатическая функция-член класса X имеет дополнительный аргумент - ссылку / указатель на (const) X, который становится this. Поэтому подпись функции-члена не такая, которую можно переварить sort. Вам нужно использовать boost::bind или std::mem_fun или std::mem_fun_ref. При использовании C ++ 11 вы можете использовать std::bind.

std::sort(..., ..., std::bind(&Test::comp, this, _1, _2));

Если подумать, то лучшим решением в этом случае было бы сделать статическую функцию вашего компа, потому что ей вообще не нужен this. В этом случае ваш оригинальный код будет работать без изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...