У меня есть карта STL с пользовательским компаратором, который я хочу передать функции, но функция не распознает пользовательский компаратор.Передача карты с пользовательским компаратором для функции
Попытка доступа к карте в рамках основной функции работает.
Я перечислил обе попытки в моем коде.
#include <iostream>
#include <string>
#include <map>
// Error: cmpByStringLength is not recognized (both times)
void funcOut(std::map<std::string, int, cmpByStringLength> myMap)
{
for (std::map<std::string, int, cmpByStringLength>::iterator it = myMap.begin(); it != myMap.end(); ++it)
{
std::cout << it->first << " => " << it->second << std::endl;
}
}
int main()
{
// Reverse sort by length
struct cmpByStringLength {
bool operator()(const std::string& a, const std::string& b) const {
return a.length() > b.length();
}
};
std::map<std::string, int, cmpByStringLength> myMap;
myMap.emplace("String 1", 5);
myMap.emplace("String 123", 10);
funcOut(myMap);
// Working
for (std::map<std::string, int, cmpByStringLength>::iterator it = myMap.begin(); it != myMap.end(); ++it)
{
std::cout << it->first << " => " << it->second << std::endl;
}
return 0;
}
вам нужно поставить 'определение cmpByStringLength' на вершине функции funcOut – billz
Перемещение-структуры в верхнем файла над функцией. Как и все остальное, вам нужно хотя бы объявление (и в этом случае определение) для вещей, которые будут использоваться. – Borgleader
Правильно, теперь это работает! Благодарю. –