Windows에서 Linux로 내 펑터를 이식하는 데 문제가 있습니다.오류 : xxx의이 인수로 const xxx를 전달하면 한정자가 제외됩니다.
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;
}
};
: 나는 그것을 변경,
리눅스 나던 지원 _stricmp으로
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;
}
};
대신 strcasecmp를 사용 : 원래는 다음과 같다 을 (펑터 엄격한 약한 순서에 대한 STL ::지도에 전달할)
그리고 지금은 "CONST"매개 변수에 대한 불평 :
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 ::지도 것.
어디서 잘못 될지 잘 모르겠습니다. bool operator() 매개 변수를 const로 변경하려고 시도했습니다. 일종의 비정규 매개 변수 전달에 대해 불만을 나타 냈기 때문에 나타납니다. 이것은 작동하지 않았으며 'bool operator()'를 'const bool operator()'로 변경하지 않았습니다.
내가 아는 한 strcasecmp는 const 함수이기 때문에 const가 아닌 상수 또는 상수 매개 변수 (c_str()도 const 임)를 전달해야하므로 틀린 위치를 정확하게 알 수 없습니다. .
나는 봤어 비슷한 문제가 있지만 난 아직도 꽤 stackoverflow 및 몇 가지 다른 장소에서 본 적이 문제에서 감각을 만들 수 없습니다.
내가 이것을 사용하고 데이터 유형은 다음과 같습니다
map<string, set<song, setSongCompare>*,stringCompare > artistMap;
아마도'const' 규정에 관한 ?? 경고가'map' 선언이나 다른 곳에서보고됩니까? – Kashyap
당신은 이식 가능하고 const char *가 아닌 std :: string에서 작동하는 문자열 알고리즘을 사용하는 것이 훨씬 낫습니다. 대소 문자를 구분하지 않는 비교 방법이 있습니다. – 111111
이 줄에보고되었습니다 : if (masterList-> artistMap.count (songArtist) == 0) songArtist는 문자열입니다. – Glem