Tengo un problema al transferir mi functor de windows a linux. (Un funtor para pasar a STL :: mapa de un estricto orden débil) El original es el siguiente:Error: pasando const xxx como este argumento de xxx descarta calificadores
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;
}
};
Como _stricmp soporte para Linux duerma pero utiliza strcasecmp lugar, lo cambié a:
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;
}
};
Y ahora se queja de parámetros "const":
passing const stringCompare as this argument of bool stringCompare::operator()
(std::string, std::string)â discards qualifiers
no estoy del todo seguro de por qué supone stringCompare debe ser una constante ...
Y la línea en la que está loco por lo cual se crea una instancia es: ser
if(masterList->artistMap.count(songArtist) == 0)
artistMap un STL :: mapa con una clave de cadena.
No estoy seguro de dónde me estoy equivocando. Intenté cambiar los parámetros del operador bool() para const, ya que parece que se queja de algún tipo de paso de parámetro no constante. Esto no funcionó, ni cambió el 'bool operator()' a 'const bool operator()'.
Por lo que yo sé, strcasecmp es una función const, así que si pasara parámetros no constantes o constantes (c_str() también es const), entonces no estoy exactamente seguro de dónde me estoy equivocando .
He buscado en Google problemas similares, pero todavía no puedo entender el problema por lo que he visto tanto en stackoverflow como en otros lugares.
El tipo de datos donde yo estoy usando esto es:
map<string, set<song, setSongCompare>*,stringCompare > artistMap;
Quizás relacionada con 'calificador const' ?? ¿Se informa la advertencia en la declaración 'map' o en otro lugar? – Kashyap
Es mucho mejor utilizar algoritmos de cadenas que son portátiles y operan en std :: string en lugar de const char *. hay uno para comparación case insensative. – 111111
se informa en esta línea: if (masterList-> artistMap.count (songArtist) == 0) donde songArtist es una cadena – Glem