ошибка C2664: «bool Strless :: operator () (const TCHAR * &, const TCHAR * &) const»: невозможно преобразовать параметр 1 из «wchar_t * const» в «const TCHAR * &» - PullRequest
0 голосов
/ 29 марта 2011

Я борюсь с ошибкой компиляции в системе, вот код

struct Strless : public binary_function<TCHAR*, TCHAR*, bool>
{   
public :

    bool operator()(const TCHAR* & _Left, const TCHAR* & _Right) const
    {   
        int iVal = _tcscmp(_Left, _Right);

        return (iVal < 0)? true:false;
    }


}; map<TCHAR *, int, Strless> mymap;

Ответы [ 3 ]

2 голосов
/ 29 марта 2011

Ваш конст не в том месте.Карта передает вам TCHAR* const, но вы берете const TCHAR*&, которые не совместимы.Вы хотите взять const TCHAR* const&.

1 голос
/ 29 марта 2011

Не имеет отношения к проблеме (на которую уже дан ответ). Но следующий код - мерзость:

return (iVal < 0)? true:false;

Условный оператор совершенно избыточен. Следующее работает так же хорошо:

return iVal < 0;

Код, такой как condition ? true : false, должен всегда заменяться просто condition. Никогда не используйте логические литералы (true, false), кроме как при назначении / инициализации.

0 голосов
/ 29 марта 2011

Похоже, вы компилируете свой код не в юникодном режиме, так что TCHAR работает на char, но вы явно используете wstring или аналогичный одновременно.Вы должны убедиться, что типы согласуются (использование value_type из вашего строкового типа может быть полезным здесь).

...