Tôi đang gặp sự cố khi chuyển functor của tôi từ cửa sổ sang linux. (Một functor để vượt qua để stl :: bản đồ cho trật tự nghiêm ngặt-yếu) Bản gốc như sau:Lỗi: chuyển const xxx làm đối số này của xxx loại bỏ vòng loại
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;
}
};
Như linux doesnt hỗ trợ _stricmp nhưng sử dụng strcasecmp thay vào đó, tôi đã thay đổi nó để:
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;
}
};
Và nó hiện đang phàn nàn về thông số "const":
passing const stringCompare as this argument of bool stringCompare::operator()
(std::string, std::string)â discards qualifiers
tôi không hoàn toàn chắc chắn tại sao nó giả stringCompare nên là một hằng số ...
Và dòng nơi mà nó là điên về vấn đề này được khởi tạo là:
if(masterList->artistMap.count(songArtist) == 0)
artistMap là một STL bản đồ :: với một phím chuỗi.
Tôi không chắc mình sẽ sai ở đâu. Tôi đã cố gắng thay đổi các tham số bool operator() thành const, vì nó xuất hiện rằng nó phàn nàn về một số loại tham số không cố định đi qua. Điều này không làm việc, cũng không thay đổi 'toán tử bool()' thành 'const bool operator()'. Theo như tôi biết, strcasecmp là một hàm const nên trường hợp cho dù tôi vượt qua nó không liên tục hoặc hằng số tham số (c_str() cũng là const), vì vậy tôi không chắc chắn chính xác nơi tôi đang đi sai .
Tôi đã giải quyết các vấn đề tương tự nhưng tôi vẫn không thể hiểu được vấn đề từ những gì tôi đã thấy cả trên stackoverflow và một vài địa điểm khác.
Các kiểu dữ liệu mà tôi đang sử dụng này là:
map<string, set<song, setSongCompare>*,stringCompare > artistMap;
lẽ liên quan đến 'vòng loại const' ?? Cảnh báo có được báo cáo tại bản khai 'bản đồ' hay không? – Kashyap
Bạn nên sử dụng thuật toán chuỗi tốt hơn và hoạt động trên chuỗi std :: chứ không phải const char *. có một cho so sánh trường hợp insensative. – 111111
nó đang được báo cáo tại dòng này: nếu (masterList-> artistMap.count (songArtist) == 0) nơi bài hátArtist là một chuỗi – Glem