Ошибка: не удалось найти соответствие для 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).

Другие вопросы по тегам