Ошибка: не удалось найти соответствие для std::multimap
Я пытаюсь скомпилировать приложение C++ на сервере SUN с помощью компилятора Sun C++ 5.9 SunOS_sparc Patch 124863-01.При получении
Error: Could not find a match for std::multimap<std::string, OutputNamespace::FUPInfo, std::less<std::string>, std::allocator<std::pair<const std::string, OutputNamespace::FUPInfo>>>::insert(std::pair<std::string, OutputNamespace::FUPInfo>) needed in operator<<(std::ostream &, InvoiceOutput&).
Это проблема, связанная с компилятором? У вас есть идеи, как ее решить? заранее спасибо
С уважением
1 ответ
Это является недостатком компилятора Sun для поддержания обратной совместимости ABI с его исходной стандартной библиотекой (в которой отсутствует очень много функций). Хочет insert
pair для внутреннего типа значения карты (с const
) добавлен к ключу, а не к фактическому типу ключа, который вы запросили в объявлении мультикарты. Например, следующие компиляции:
#include <map>
#include <string>
int main()
{
std::multimap<std::string, int> mapperizer;
mapperizer.insert(std::pair<const std::string, int>(std::string("Foo"), 42));
}
Кроме того, оригинальная версия будет успешно скомпилирована с stlport4 (аргумент командной строки -library=stlport4
).