example.cpp(17):error С2440:'initializing': cannot convert from 'class std::_Tree, class std::allocator >, struct std::pair, class std::allocator > const, class std::basic_string, class std::allocator > >, struct std::map, class std::allocator >, class std::basic_string, class std::allocator >, struct std::less, class std::allocator > >, class std::allocator, class std::allocator > > >::_Kfn, struct std::less, class std::allocator > >, class std::allocator, class std::allocator > > >::const_iterator' to 'class std::_Tree, class std::allocator >, struct std::pair, class std::allocator > const, class std::basic_string, class std::allocator > >, struct std::map, class std::allocator >, class std: std::char_traits, class std::allocator >, struct std std::basic_string, class std::basic_string >, struct std::less, class std::allocator > >, class std::allocator, class std::allocator : basic_string, class std::allocator >, struct std::char_traits, class std::basic_string > const, class std::char_traits, class std::allocator >, struct std::map, class std::allocator >, class std std::allocator >, struct std::char_traits, class std::basic_string > >, class std::basic_string, class less > >, class std::char_traits, class std::basic_string > > >::char traits, class std::allocator, class std::allocator > > >::iterator'
No constructor could take the source type, or constructor overload resolution was ambiguous
Сообщение состоит из 2095 символов и выглядит довольно устрашающе, но я видал и похуже. Например, одна из моих любимых платформ STL однажды выдала сообщение из 4812 символов. Наверное, вы уже догадались, что я люблю ее совсем не за это.
Давайте немного сократим эту хаотическую запись и приведем ее к более удобному виду. Начнем с замены конструкции basic_string
… на string
. Результат выглядит так:
example.cpp(17):error С2440:'initializing': cannot convert from 'class std::_Tree, struct std::map, class std::allocator >::_Kfn, struct std::less, class std::allocator >::const_iterator' to 'class std::_Tree, struct std::map, class std::allocator >::_Kfn, struct std::less, class std::allocator >: iterator'
No constructor could take the source type, or constructor overload resolution was ambiguous
Уже лучше. Осталось каких-нибудь 745 символов, можно начинать разбираться в сообщении. В глаза бросается упоминание шаблона std::_Tree
. В Стандарте ничего не сказано о шаблоне с именем Tree
, но мы помним, что имена, начинающиеся с символа подчеркивания и прописной буквы, зарезервированы для авторов реализаций. Перед нами один из внутренних шаблонов, используемых в реализации некой составляющей STL.