Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ использованиС STLΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 55

Автор Π‘ΠΊΠΎΡ‚Ρ‚ ΠœΠ΅ΠΉΠ΅Ρ€Ρ

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<class string,struct std::pair<class string const.class string >,struct std::map<class string,class string,struct std::less<class string >,class std::allocator<class string > > ::_Kfn.struct std::less<class string >,class std::allocator<class string > > ::const_iterator' to 'class std::_Tree<class string.struct std::pair<class string const,class string >,struct std::map<class string, class string.struct std::less<class string>, class std::allocator<class string > >::_Kfn,struct std::less<class string >. class std::allocator<class string > >: iterator'

No constructor could take the source type, or constructor overload resolution was ambiguous

Π£ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅. ΠžΡΡ‚Π°Π»ΠΎΡΡŒ ΠΊΠ°ΠΊΠΈΡ…-Π½ΠΈΠ±ΡƒΠ΄ΡŒ 745 символов, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² сообщСнии. Π’ Π³Π»Π°Π·Π° бросаСтся ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ шаблона std::_Π’Π³Π΅Π΅. Π’ Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ сказано ΠΎ шаблонС с ΠΈΠΌΠ΅Π½Π΅ΠΌ Tree, Π½ΠΎ ΠΌΡ‹ ΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π°, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с символа подчСркивания ΠΈ прописной Π±ΡƒΠΊΠ²Ρ‹, Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ. ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… шаблонов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΠΊΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ STL.

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, практичСски Π²ΠΎ всСх рСализациях STL стандартныС ассоциативныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ (set, multiset, map ΠΈ multimap) строятся Π½Π° основС Π±Π°Π·ΠΎΠ²Ρ‹Ρ… шаблонов. По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ использовании string Π² диагностикС упоминаСтся Ρ‚ΠΈΠΏ basic_string, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со стандартными ассоциативными ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ часто Π²Ρ‹Π΄Π°ΡŽΡ‚ΡΡ сообщСния с ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ΠΌ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… шаблонов. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ этот шаблон называСтся _Tree, Π½ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… извСстных ΠΌΠ½Π΅ рСализациях Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ ΠΈΠΌΠ΅Π½Π° tree ΠΈ _rb_tree, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² послСднСм ΠΈΠΌΠ΅Π½ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ Ρ„Π°ΠΊΡ‚ использования красно-Ρ‡Π΅Ρ€Π½Ρ‹Ρ… (Red-Black) Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π², самой распространСнной разновидности сбалансированных Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π², Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰Π΅ΠΉΡΡ Π² рСализациях STL.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ сообщСнии упоминаСтся Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ std::map<class string.class string,stuct std::less<class string>,class std::allocator<class string> >. ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ Ρ‚ΠΈΠΏ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° map, Ссли Π½Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сравнСния ΠΈ распрСдСлитСля памяти (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ Π·Π°Π΄Π°Π½Ρ‹ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°). Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС станСт Π±ΠΎΠ»Π΅Π΅ понятным, Ссли Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ этот Ρ‚ΠΈΠΏ нашим Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ NicknameMap. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

example.срр(17):Π΅Π³Π³ΠΎΠ³ Π‘2440:'initalzing': cannot convert from 'class std::_Tree<class string.struct std::pair<class string const.class string >,struct NicknameMap::_Kfn,struct std::less<class string>,class std::allocator<class string > >::const_iterator' to 'class std::_Tree<class string.struct std::pair<class string const.class string >.struct NicknameMap_Kfn.struct std::less<class string >, class std::allocator<class string > >: iterator'

No constructor could take the source type, or constructor overload resolution was ambiguous

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ стало ΠΊΠΎΡ€ΠΎΡ‡Π΅, Π½ΠΎ Π΅Π³ΠΎ смысл остался Ρ‚ΡƒΠΌΠ°Π½Π½Ρ‹ΠΌ; Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с _Π’Π³Π΅Π΅. Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ шаблон _Π’Π³Π΅Π΅ Π·Π°Π²4исит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, поэтому ΡƒΠ·Π½Π°Ρ‚ΡŒ смысл Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ способом β€” Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ исходных тСкстов. Но Π·Π°Ρ‡Π΅ΠΌ ΠΊΠΎΠΏΠ°Ρ‚ΡŒΡΡ Π² исходных тСкстах Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ STL, Ссли это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ? ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ просто Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Tree, условным ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Β«ΠΠ•Π§Π’ΠžΒ» ΠΈ посмотрим, Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΠΉΠ΄Π΅Ρ‚. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

example.cpp(17):error Π‘2440:'initalizing': cannot convert from 'class std::_Tree<ΠΠ•Π§Π’Πž::const_iterator' to 'class std::_Tree<ΠΠ•Π§Π’Πž:iterator'

No constructor could take the source type, or constructor overload resolution was ambiguous

А Π²ΠΎΡ‚ с этим ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ТалуСтся Π½Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ прСобразования const_iterator Π² iterator с явным Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€Π°Π²ΠΈΠ» константности.

ВСрнСмся ΠΊ исходному ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ; строка, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ°Ρ Π³Π½Π΅Π² компилятора, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΆΠΈΡ€Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ:

class NiftyEmailProgram {

private:

typedef map<string,string> NicknameMap;

NicknameMap nicknames;

public:

void showEmailAddress(const string& nickname) const;

};

void NiftyEmailProgram::showEmailAddress(const string& nickname) const

{

NicknameMap::iterator i =nicknames. find(nickname);

if (i!=nicknames.end())...

}

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΡ‚ΠΎΠ»ΠΊΠΎΠ²Π°Ρ‚ΡŒ лишь ΠΎΠ΄Π½ΠΈΠΌ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ β€” ΠΌΡ‹ пытаСмся ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i (Ρ‚ΠΈΠΏΠ° iterator) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ° const_iterator, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ map::find. Вакая интСрпрСтация выглядит нСсколько странно, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ find вызываСтся для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° nicknames. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ nicknames Π½Π΅ являСтся константным, поэтому функция find Π΄ΠΎΠ»ΠΆΠ½Π° Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ нСконстантный ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€.

ВзглянитС Π΅Ρ‰Π΅ Ρ€Π°Π·. Π”Π°, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ nicknames объявлСн ΠΊΠ°ΠΊ нСконстантный Ρ‚ΠΈΠΏ map, Π½ΠΎ функция showEmalAddress являСтся константной, Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ константной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всС нСстатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса становятся константными! Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Π½ΡƒΡ‚Ρ€ΠΈ showEmalAddress ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ nicknames являСтся константным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ map. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ ΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ смысл. ΠœΡ‹ пытаСмся ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ iterator для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° map, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Π΅Ρ‰Π°Π»ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π»ΠΈΠ±ΠΎ привСсти i ΠΊ Ρ‚ΠΈΠΏΡƒ const_iterator, Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ showEmalAddress нСконстантной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. ВСроятно, ΠΎΠ±Π° способа ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… усилий, Ρ‡Π΅ΠΌ выяснСниС смысла сообщСния ΠΎΠ± ошибкС.

Π’ этом совСтС Π±Ρ‹Π»ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ тСкстовыС подстановки, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°ΡŽΡ‰ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Π½ΠΎ послС Π½Π΅ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π²Ρ‹ смоТСтС Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ подстановки Π² Π³ΠΎΠ»ΠΎΠ²Π΅. Π― Π½Π΅ ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π½Ρ‚, Π½ΠΎ ΠΌΠ½Π΅ рассказывали, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π½Ρ‚Ρ‹ способны Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρ‚ΠΈΡ‚ΡƒΡ€Ρƒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, Π½Π΅ ΠΏΡ€ΠΈΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡΡΡŒ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π½ΠΎΡ‚Π°ΠΌ. ΠžΠΏΡ‹Ρ‚Π½Ρ‹Π΅ программисты STL ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°ΡŽΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ. Они ΠΌΠΎΠ³ΡƒΡ‚ автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π²ΠΈΠ΄Π° std::basic_string<char, std::char_traits<char>,std::allocator<char> > Π² string, нисколько Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°ΡΡΡŒ Π½Π°Π΄ происходящим. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π½Π°Π²Ρ‹ΠΊ Ρ€Π°Π·ΠΎΠ²ΡŒΠ΅Ρ‚ΡΡ ΠΈ Ρƒ вас, Π½ΠΎ Π΄ΠΎ этих ΠΏΠΎΡ€ слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ диагностику компилятора ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΠΌΠΎΠΆΠ½ΠΎ привСсти ΠΊ Π²Ρ€Π°Π·ΡƒΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π½Π° Π±Π°Π·Π΅ шаблонов Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌΠΈ мнСмоничСскими обозначСниями. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях для этого достаточно Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ опрСдСлСния Ρ‚ΠΈΠΏΠΎΠ² ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ИмСнно это Π±Ρ‹Π»ΠΎ сдСлано Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ std::map<class string,class string,struct std::less<class string>,class std::allocator<class string> > Π½Π° NicknameMap.

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² сообщСниях компилятора, относящихся ΠΊ STL.

‒Для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² vector ΠΈ string ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, поэтому Π² случаС ошибки с ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π² диагностикС компилятора ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΡ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. НапримСр, Ссли Π² исходном ΠΊΠΎΠ΄Π΅ имССтся ссылка Π½Π° vector<double>:: iterator, Π² сообщСнии ΠΏΠΎΡ‡Ρ‚ΠΈ навСрняка Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ double*. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ составляСт рСализация STLport Π² ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅; Π² этом случаС ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ vector ΠΈ string Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ указатСлями. Π—Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ STLport ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊ совСту 50.

‒БообщСния, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ back_insert_iterator, front_insert_iterator ΠΈ insert_iterator, ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ошибка Π±Ρ‹Π»Π° Π΄ΠΎΠΏΡƒΡ‰Π΅Π½Π° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ back_inserter, front_inserter ΠΈΠ»ΠΈ inserter соотвСтствСнно (back_inserter Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° back_insert_iterator, front_inserter Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° front_insert_iterator, a inserter Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° insert_iterator; Π·Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ± этих Ρ‚ΠΈΠΏΠ°Ρ… ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊ совСту 30). Если эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΈΡΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (косвСнно ΠΈΠ»ΠΈ явно).

‒БообщСния с упоминаниями binder1st ΠΈ binder2nd ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠ± ошибкС ΠΏΡ€ΠΈ использовании bind1st ΠΈ bind2nd (bind1st Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° binder1st, a bind2nd Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° binder2nd).

β€’Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ostream_iterator ΠΈ ostream_buf_iterator β€” см. совСт 29, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ back_inserter, front_inserter ΠΈ inserter) Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ свои ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ вставки Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² присваивания, поэтому ошибки, относящиСся ΠΊ этим Ρ‚ΠΈΠΏΠ°ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ приводят ΠΊ появлСнию сообщСний ΠΎΠ± ошибкС Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² присваивания, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ ΠΈ понятия Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΎ Ρ‡Π΅ΠΌ ΠΈΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚:

vector<string*> v;// ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹Π²ΠΎΠ΄Π° содСрТимого

copy(v.begin(),v.end(),// ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ string*

ostream_iterator<string>(cout."\n")); // ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² string

‒Если ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ сообщСниС ΠΎΠ± ошибкС исходит ΠΈΠ· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° STL (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ссли ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка, находится Π² <algoritm>), вСроятно, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° связана с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ этому Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚:

list<int>::iterator 11,12; // ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° двусторонних ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

sort(11.2);// Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

// ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ доступа

‒Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ стандартный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ STL (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ vector ΠΈΠ»ΠΈ string, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ for_each), Π° компилятор ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ понятия Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚, Ρ‡Ρ‚ΠΎ имССтся Π² Π²ΠΈΠ΄Ρƒ, скорСС всСго, Π²Ρ‹ Π·Π°Π±Ρ‹Π»ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ #include. Как ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π² совСтС 48, эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π²ΡˆΠ΅Π³ΠΎΡΡ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΏΡ€ΠΈ пСрСносС Π΅Π³ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ.

Π‘ΠΎΠ²Π΅Ρ‚ 50. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎ web-сайтах, посвящСнных STL