У меня проблема с переносом моего функтора из окон в linux. (Функтор перейти к СТЛ :: карта для строгого слабой упорядоченности) Оригинал следующим образом:Ошибка: передача const xxx, поскольку этот аргумент xxx отбрасывает квалификаторы
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;
}
};
Как линукс оленья кожа поддержки _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 будучи СТЛ :: карта с ключом строки.
Я не уверен, где я ошибаюсь. Я попытался изменить параметры bool operator() на const, так как кажется, что он жалуется на некоторую непереходную передачу параметров. Это не сработало и не изменило «bool operator()» на «const bool operator()».
Насколько я знаю, strcasecmp - это функция const, поэтому следует учитывать, передаю ли я ей непостоянные или постоянные параметры (c_str() также является константой), поэтому я не совсем уверен, где я ошибаюсь ,
У меня есть аналогичные проблемы с Google, но я все еще не могу понять смысл этой проблемы из того, что я видел как в stackoverflow, так и в нескольких других местах.
Тип данных, где я использую это:
map<string, set<song, setSongCompare>*,stringCompare > artistMap;
Может быть связано с 'const' классификатором ?? Предупреждение сообщается в декларации 'map' или где-то еще? – Kashyap
Вам намного лучше использовать строковые алгоритмы, которые переносятся и работают на std :: string, а не на const char *. есть одно для случая нечувствительного сравнения. – 111111
сообщается на эту строку: если (мастерList-> художникMap.count (songArtist) == 0) , где songArtist - это строка – Glem