Ошибка: передача const xxx в качестве этого аргумента xxx отбрасывает квалификаторы

У меня проблема с портированием моего функтора из Windows в Linux. (функтор для передачи в stl::map для строго-слабого упорядочения) Оригинал выглядит следующим образом:

struct stringCompare{ // Utilized as a functor for stl::map parameter for strings 
    bool operator() (string lhs, string rhs){ // Returns true if lhs < rhs
        if(_stricmp(lhs.c_str(), rhs.c_str())  < 0) return true;
        else return false;
    }
};

Поскольку linux не поддерживает _stricmp, а вместо этого использует strcasecmp, я изменил его на:

struct stringCompare{ 
    bool operator() (string lhs, string rhs){ // Returns true if lhs < rhs
        if(strcasecmp(lhs.c_str(), rhs.c_str())  < 0) return true;
        else return false;
    }
};

И теперь он жалуется на "константные" параметры:

passing const stringCompare as this argument of bool stringCompare::operator()  
(std::string, std::string)â discards qualifiers

Я не совсем уверен, почему он предполагает stringCompare должна быть константой...

И строка, в которой он возмущен созданием этого экземпляра:

if(masterList->artistMap.count(songArtist) == 0) 

artistMap представляет собой stl::map со строковым ключом.

Не знаю, где я ошибаюсь. Я попытался изменить параметры bool operator() на const, так как кажется, что он жалуется на передачу какого-то непостоянного параметра. Это не сработало, равно как и изменение 'bool operator()' на 'const bool operator()'.

Насколько я знаю, strcasecmp является константной функцией, поэтому она должна определять, передаю ли я ей непостоянные или постоянные параметры (c_str() также является константой), поэтому я не совсем уверен, где я ошибаюсь.

Я гуглил похожие проблемы, но до сих пор не могу понять суть проблемы из того, что я видел как на stackoverflow, так и в паре других мест.

Тип данных, где я использую это:

map<string, set<song, setSongCompare>*,stringCompare > artistMap;
6
задан Glem 19 March 2012 в 19:24
поделиться