Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка Undefined Π² ЯндСкс ΠΏΠΎΡ‡Ρ‚Π°

Π’ сСрСдинС дСкабря 2016 Π³ΠΎΠ΄Π° (с 16 дСкабря ΠΈ послС) ряд ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ элСктронных ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ящиков Π½Π° Yandex массово ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ своСй элСктронной коррСспондСнции ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ сообщСниями Β«undefine errorΒ», Β«error data failedΒ» ΠΈ рядом Π΄Ρ€ΡƒΠ³ΠΈΡ… Π² ЯндСкс ΠΏΠΎΡ‡Ρ‚Π΅. ΠŸΡ€ΠΈ этом повторная ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΏΠΎΡ‡Ρ‚Ρƒ Ρ‚Π°ΠΊΠΆΠ΅ оканчиваСтся Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, систСма Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΈ Ρ‡Ρ‚ΠΎ Π΄Π°Π»Π΅Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Π΄Π°Π½Π½ΠΎΠΉ ситуации ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΈ Π½Π΅ прСдставляСт. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу, Ρ‡Ρ‚ΠΎ это Π·Π° ошибка Undefined Π² ЯндСксС, ΠΊΠ°ΠΊΠΎΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΅Ρ‘ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΈ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° данная ошибка.

Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. yandex 1. Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ. Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ-yandex 1. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° yandex 1

Π§Ρ‚ΠΎ Π·Π° ошибка Π² ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌ сСрвисС ЯндСкса

ΠžΡ‚Π²Π΅Ρ‚ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это ошибка, слСдуСт Π½Π°Ρ‡Π°Ρ‚ΡŒ с ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° тСкста самой ошибки. Π’ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ с английского языка Β«undefinedΒ» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉΒ». БоотвСтствСнно, ΠΏΠΎΠ΄ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ систСма ЯндСкса ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΡΡƒΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ систСмС Π½Π΅ извСстна (ΠΈΠ»ΠΈ, ΠΏΡ€ΠΈ использовании языка Javascript, Ρ‚Π°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ получаСтся ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ созданы, Π½ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹).

БоотвСтствСнно, Ссли ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с Β«Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉΒ» ошибкой, Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ возникновСния послСднСй ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ. НСкоторыС ΠΈΠ· спСциалистов связанных с «ЯндСкс» Π²Ρ‹Π΄Π²ΠΈΠ³Π°ΡŽΡ‚ Π²Π΅Ρ€ΡΠΈΡŽ ΠΎ DOS-Π°Ρ‚Π°ΠΊΠ΅, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Π½Π° сСрвСры ЯндСкса, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚ΡŒ Ρ€ΡƒΠΊΡƒ Π·Π°Ρ€ΡƒΠ±Π΅ΠΆΠ½Ρ‹Π΅ Ρ…Π°ΠΊΠ΅Ρ€Ρ‹ (выдвигаСтся Π΄Π°ΠΆΠ΅ достаточно ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ вСрсия ΠΎ «мСсти» ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π“ΡƒΠ³Π» Π·Π° скандальноС Π°Π½Ρ‚ΠΈΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½ΠΎΠ΅ Π΄Π΅Π»ΠΎ, ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ «ЯндСкс»).

Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. error1. Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ. Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ-error1. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° error1

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, сСрвис ЯндСкс.ΠŸΠΎΡ‡Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠΊΠΎΠ»ΠΎ 27 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ с 16 дСкабря стал рСгулярно Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Β«undefined errorΒ», Π° частная ΠΈ корпоративная ΠΏΠΎΡ‡Ρ‚Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² Π½Π° ЯндСкс Π½Π΅ Π±Ρ‹Π»Π° воврСмя доставлСна ΠΊ мСсту назначСния.

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Undefined Π² ЯндСкс ΠΏΠΎΡ‡Ρ‚Π°

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, ΠΊΠ°ΠΊ я ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Ρ‡ΡƒΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅, это ошибка Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ, Π° самого сСрвиса ЯндСкс, это сущСствСнно ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ситуации Π²Ρ‹ вряд Π»ΠΈ смоТСтС. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΠΎΠ³Ρƒ ΠΏΠΎΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°ΠΌ ряд дСйствий, способных ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² вопросС устранСния ошибки Π² ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌ сСрвисС ЯндСкса. Π˜Ρ‚Π°ΠΊ:

Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. error2. Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ. Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ-error2. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° error2

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, Ссли Ρƒ вас ΡΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ ошибка Undefined Π² ЯндСкс ΠΏΠΎΡ‡Ρ‚Π°, Ρ‚ΠΎ это ошибка самого ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ сСрвиса, ΠΈ сущСствСнно ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ лишь ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ²ΡˆΠΈΡΡŒ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ Π² слуТбу тСхничСской ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ. По ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π½Π° Π΄Π°Ρ‚Ρƒ написания Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±Ρ‹Π»ΠΈ ΡƒΠΆΠ΅ Π² Ρ†Π΅Π»ΠΎΠΌ устранСны, Π° ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ сСрвис ЯндСкс Π½Ρ‹Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Ошибки Π² JavaScript ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ

JavaScript ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΡˆΠΌΠ°Ρ€ΠΎΠΌ ΠΏΡ€ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅: Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ Π²Ρ‹Π΄Π°Π΅Ρ‚, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ для понимания с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ взгляда, ΠΈ Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° строк Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ всСгда ΠΏΠΎΠ»Π΅Π·Π½Ρ‹. Π Π°Π·Π²Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ список, глядя Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ смысл ошибок ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ…? Π’ΠΎΡ‚ ΠΎΠ½!

НиТС прСдставлСн список странных ошибок Π² JavaScript. Π Π°Π·Π½Ρ‹Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ сообщСния ΠΎΠ± ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, поэтому ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

Как Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ошибки?

ΠŸΠ΅Ρ€Π΅Π΄ самим списком, Π΄Π°Π²Π°ΠΉΡ‚Π΅ быстро взглянСм Π½Π° структуру сообщСния ΠΎΠ± ошибкС. ПониманиС структуры ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ошибки, ΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ мСньшС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ссли Π½Π°Ρ‚ΠΊΠ½Π΅Ρ‚Π΅ΡΡŒ Π½Π° ошибки, Π½Π΅ прСдставлСнныС Π² этом спискС.

Випичная ошибка ΠΈΠ· Chrome выглядит Ρ‚Π°ΠΊ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊ самим ошибкам.

Uncaught TypeError: undefined is not a function

БвязанныС ошибки: number is not a function, object is not a function, string is not a function, Unhandled Error: β€˜foo’ is not a function, Function Expected

Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° значСния ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π½Π΅ являСтся. НапримСр:

Π­Ρ‚Π° ошибка ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Ссли Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΎ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚Π°Π»ΠΈΡΡŒ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ β€œnumber is not a function” Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ число, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ΠΎ являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ: ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² коррСктности ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Для этой ошибки, Π½ΠΎΠΌΠ΅Ρ€ строки ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ мСсто.

Uncaught ReferenceError: Invalid left-hand side in assignment

БвязанныС ошибки: Uncaught exception: ReferenceError: Cannot assign to β€˜functionCall()’, Uncaught exception: ReferenceError: Cannot assign to β€˜this’

Π’Ρ‹Π·Π²Π°Π½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΎΠΉ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΌΡƒ, Ρ‡Π΅ΠΌΡƒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

НаиболСС частый ΠΏΡ€ΠΈΠΌΠ΅Ρ€ этой ошибки β€” это условиС Π² if:

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ программист случайно использовал ΠΎΠ΄ΠΈΠ½ Π·Π½Π°ΠΊ равСнства вмСсто Π΄Π²ΡƒΡ…. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€œleft-hand side in assignment” относится ΠΊ Π»Π΅Π²ΠΎΠΉ части Π·Π½Π°ΠΊΠ° равСнства, Π°, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, лСвая Ρ‡Π°ΡΡ‚ΡŒ содСрТит Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Π΅ΠΌΡƒ нСльзя ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС.

Uncaught TypeError: Converting circular structure to JSON

БвязанныС ошибки: Uncaught exception: TypeError: JSON.stringify: Not an acyclic Object, TypeError: cyclic object value, Circular reference in value argument not supported

Π’Π°ΠΊ ΠΊΠ°ΠΊ a ΠΈ b Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ ссылки Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊ JSON.

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ: ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ цикличСскиС ссылки, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅, ΠΈΠ· всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² JSON.

Unexpected token ;

БвязанныС ошибки: Expected ), missing ) after argument list

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ JavaScript Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΎΠΆΠΈΠ΄Π°Π», Π½ΠΎ Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» Ρ‚Π°ΠΌ этого. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌΠΈ, ΠΊΡ€ΡƒΠ³Π»Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ скобками.

Π’ΠΎΠΊΠ΅Π½ Π² Π΄Π°Π½Π½ΠΎΠΉ ошибкС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΌ β€” ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ написано β€œUnexpected token ]”, β€œExpected <” ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅.

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ: ΠΈΠ½ΠΎΠ³Π΄Π° Π½ΠΎΠΌΠ΅Ρ€ строки Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ мСстополоТСниС, Ρ‡Ρ‚ΠΎ затрудняСт исправлСниС ошибки.

Ошибка с [ ] < >( ) ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠ°Ρ€ΠΎΠΉ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, всС Π»ΠΈ ваши скобки ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ. Π’ этом случаС, Π½ΠΎΠΌΠ΅Ρ€ строки ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ΅, Π° Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΉ символ.

Unexpected / связано с рСгулярными выраТСниями. НомСр строки для Π΄Π°Π½Π½ΠΎΠ³ΠΎ случая ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ.

Unexpected; ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ символом; Π²Π½ΡƒΡ‚Ρ€ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ массива, ΠΈΠ»ΠΈ списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НомСр строки ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅Ρ€Π½Ρ‹ΠΌ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ случая.

Uncaught SyntaxError: Unexpected token ILLEGAL

БвязанныС ошибки: Unterminated String Literal, Invalid Line Terminator

Π’ строковом Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π΅ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π° Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°.

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ: ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ всС строки ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.

Uncaught TypeError: Cannot read property β€˜foo’ of null, Uncaught TypeError: Cannot read property β€˜foo’ of undefined

БвязанныС ошибки: TypeError: someVal is null, Unable to get property β€˜foo’ of undefined or null reference

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ null ΠΈΠ»ΠΈ undefined Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. НапримСр:

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ: ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ°ΠΌΠΈ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, всС Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ рядом со строкой, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Π½Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π½Π°Π·Π²Π°Π½Ρ‹.

Uncaught TypeError: Cannot set property β€˜foo’ of null, Uncaught TypeError: Cannot set property β€˜foo’ of undefined

БвязанныС ошибки: TypeError: someVal is undefined, Unable to set property β€˜foo’ of undefined or null reference

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ null ΠΈΠ»ΠΈ undefined Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. НапримСр:

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ: это Ρ‚ΠΎΠΆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ ошибками. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… рядом со строкой, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Π½Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Uncaught RangeError: Maximum call stack size exceeded

БвязанныС ошибки: Uncaught exception: RangeError: Maximum recursion depth exceeded, too much recursion, Stack overflow

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ бСсконСчному Π²Ρ‹Π·ΠΎΠ²Ρƒ рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ рСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π½ΡƒΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… Π΄Π΅Π»Π°Ρ‚ΡŒ рСкурсивныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π²Π΅Ρ‡Π½ΠΎ.

Uncaught URIError: URI malformed

БвязанныС ошибки: URIError: malformed URI sequence

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ: ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Ρ‹ decodeURIComponent Π½Π° строкС ошибки ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

XMLHttpRequest cannot load some/url. No β€˜Access-Control-Allow-Origin’ header is present on the requested resource

БвязанныС ошибки: Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at some/url

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° всСгда связана с использованиСм XMLHttpRequest.

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ: ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² коррСктности Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ URL ΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ удовлСтворяСт same-origin policy. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ способ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ β€” ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° URL Π² сообщСнии ошибки ΠΈ Π½Π°ΠΉΡ‚ΠΈ Π΅Π³ΠΎ Π² своём ΠΊΠΎΠ΄Π΅.

InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable

БвязанныС ошибки: InvalidStateError, DOMException code 11

ΠžΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π²Ρ‹Π·Π²Π°Π» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ нСльзя Π±Ρ‹Π»ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ состоянии. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ связано c XMLHttpRequest ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π° Π½Ρ‘ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎ Π΅Π³ΠΎ готовности.

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ: посмотритС Π½Π° ΠΊΠΎΠ΄ Π² строкС, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Π½Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ вызываСтся Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ добавляСт Π½ΡƒΠΆΠ½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π΄ΠΎ этого (ΠΊΠ°ΠΊ с xhr.open ).

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

JavaScript содСрТит Π² сСбС ΠΎΠ΄Π½ΠΈ ΠΈΠ· самых бСсполСзных ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Π²ΠΈΠ΄Π΅Π», Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½ΠΎ извСстной Expected T_PAAMAYIM_NEKUDOTAYIM Π² PHP. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½Π½ΠΎΡΡ‚ΡŒ с ошибками привносит большС ясности. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ Ρ‚ΠΎΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ большС Π½Π΅ Π²Ρ‹Π΄Π°ΡŽΡ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ бСсполСзныС ошибки, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅.

КакиС самыС нСпонятныС ошибки Π²Ρ‹ встрСчали? Π”Π΅Π»ΠΈΡ‚Π΅ΡΡŒ своими наблюдСниями Π² коммСнтариях.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка Undefined Π² ЯндСкс ΠΏΠΎΡ‡Ρ‚Π°

Π’ сСрСдинС дСкабря 2016 Π³ΠΎΠ΄Π° (с 16 дСкабря ΠΈ послС) ряд ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ элСктронных ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ящиков Π½Π° Yandex массово ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ своСй элСктронной коррСспондСнции ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ сообщСниями Β«undefined errorΒ», Β«error data failedΒ» ΠΈ рядом Π΄Ρ€ΡƒΠ³ΠΈΡ… Π² ЯндСкс ΠΏΠΎΡ‡Ρ‚Π΅. ΠŸΡ€ΠΈ этом повторная ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΏΠΎΡ‡Ρ‚Ρƒ Ρ‚Π°ΠΊΠΆΠ΅ оканчиваСтся Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, систСма Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΈ Ρ‡Ρ‚ΠΎ Π΄Π°Π»Π΅Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Π΄Π°Π½Π½ΠΎΠΉ ситуации ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΈ Π½Π΅ прСдставляСт. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу, Ρ‡Ρ‚ΠΎ это Π·Π° ошибка Undefined Π² ЯндСкс ΠΏΠΎΡ‡Ρ‚Π°, ΠΊΠ°ΠΊΠΎΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΅Ρ‘ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹, ΠΈ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ссли ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка Undefined Π² ΠΏΠΎΡ‡Ρ‚Π΅ ΠΎΡ‚ ЯндСкс.

Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. proizoshla oshibka undefined v yandeks pochta 1. Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ. Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ-proizoshla oshibka undefined v yandeks pochta 1. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° proizoshla oshibka undefined v yandeks pochta 1ЯндСкс ΠΏΠΎΡ‡Ρ‚Π°

Π§Ρ‚ΠΎ Π·Π° ошибка Undefined Π² ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌ сСрвисС

ΠžΡ‚Π²Π΅Ρ‚ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это ошибка Undefined Π² ЯндСкс, слСдуСт Π½Π°Ρ‡Π°Ρ‚ΡŒ с ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° тСкста самой ошибки. Π’ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ с английского языка Β«undefinedΒ» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉΒ». БоотвСтствСнно, ΠΏΠΎΠ΄ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ систСма ЯндСкса ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΡΡƒΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ систСмС Π½Π΅ извСстна (ΠΈΠ»ΠΈ, ΠΏΡ€ΠΈ использовании языка Javascript, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«undefinedΒ» получаСтся ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ созданы, Π½ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹).

БоотвСтствСнно, Ссли ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с Β«Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉΒ» ошибкой, Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ возникновСния послСднСй ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ. НСкоторыС ΠΈΠ· спСциалистов связанных с «ЯндСкс» Π²Ρ‹Π΄Π²ΠΈΠ³Π°ΡŽΡ‚ Π²Π΅Ρ€ΡΠΈΡŽ ΠΎ DOS-Π°Ρ‚Π°ΠΊΠ΅, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Π½Π° сСрвСры ЯндСкса, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚ΡŒ Ρ€ΡƒΠΊΡƒ Π·Π°Ρ€ΡƒΠ±Π΅ΠΆΠ½Ρ‹Π΅ Ρ…Π°ΠΊΠ΅Ρ€Ρ‹ (выдвигаСтся Π΄Π°ΠΆΠ΅ достаточно ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ вСрсия ΠΎ «мСсти» ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π“ΡƒΠ³Π» Π·Π° скандальноС Π°Π½Ρ‚ΠΈΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½ΠΎΠ΅ Π΄Π΅Π»ΠΎ, ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ «ЯндСкс»).

Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. proizoshla oshibka undefined v yandeks pochta 2. Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ. Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ-proizoshla oshibka undefined v yandeks pochta 2. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° proizoshla oshibka undefined v yandeks pochta 2Ошибка Undefined

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, сСрвис ЯндСкс.ΠŸΠΎΡ‡Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠΊΠΎΠ»ΠΎ 27 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ с 16 дСкабря стал рСгулярно Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Β«undefined errorΒ», Π° частная ΠΈ корпоративная ΠΏΠΎΡ‡Ρ‚Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² Π½Π° ЯндСкс Π½Π΅ Π±Ρ‹Π»Π° воврСмя доставлСна ΠΊ мСсту назначСния.

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Undefined Π² ЯндСкс ΠΏΠΎΡ‡Ρ‚Π°

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, ΠΊΠ°ΠΊ я ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Ρ‡ΡƒΡ‚ΡŒ Π²Ρ‹ΡˆΠ΅, это ошибка Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ, Π° самого сСрвиса ЯндСкс, это сущСствСнно ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ситуации Π²Ρ‹ вряд Π»ΠΈ смоТСтС. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΠΎΠ³Ρƒ ΠΏΠΎΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°ΠΌ ряд дСйствий, способных ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² вопросС устранСния ошибки Undefined Π² ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌ сСрвисС ЯндСкса. Π˜Ρ‚Π°ΠΊ:

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, Ссли Ρƒ вас ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка Undefined Π² ЯндСкс ΠΏΠΎΡ‡Ρ‚Π°, Ρ‚ΠΎ это ошибка самого ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ сСрвиса, ΠΈ сущСствСнно ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ лишь ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ²ΡˆΠΈΡΡŒ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ Π² слуТбу тСхничСской ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ. По ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π½Π° Π΄Π°Ρ‚Ρƒ написания Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π±Ρ‹Π»ΠΈ ΡƒΠΆΠ΅ Π² Ρ†Π΅Π»ΠΎΠΌ устранСны, Π° ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ сСрвис ЯндСкс Π½Ρ‹Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

7 совСтов ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ undefined Π² JavaScript

ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ

7 совСтов ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ undefined Π² JavaScript

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ Π’Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π½Π΅ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ Π½Π°ΠΌΠΈ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ undefined Π² JavaScript

undefined являСтся ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Богласно спСцификации ECMAScript, undefined Π² JavaScript ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ доступС ΠΊ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ элСмСнтам массива, etc. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Как Π²ΠΈΠ΄ΠΈΠΌ, undefined выводится ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ доступа ΠΊ:

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ typeof Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку undefined для Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ значСния:

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ typeof ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ значСния undefined Π² JavaScript:

Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ undefined Π² JavaScript

НСинициализированная пСрСмСнная

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ способы Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

1. const ΠΈ let вмСсто var

ΠžΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ находятся Π² области видимости, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π±Π»ΠΎΠΊΠΎΠΌ ΠΊΠΎΠ΄Π°, ΠΈ находятся Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΡ‘Ρ€Ρ‚Π²ΠΎΠΉ Π·ΠΎΠ½Π΅ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° присвоСния ΠΈΠΌ значСния.

ΠŸΡ€ΠΈ использовании нСизмСняСмых Π΄Π°Π½Π½Ρ‹Ρ… (констант) рСкомСндуСтся ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ const :

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° Π½Π΅ подвСргаСтся Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ undefined Π² этом случаС Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

13–15 дСкабря, Онлайн, Π‘Π΅cΠΏΠ»Π°Ρ‚Π½ΠΎ

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΡŒΡ‚Π΅ Π΅Ρ‘ ΠΊΠ°ΠΊ let ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ присваивайтС Π΅ΠΉ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° var Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² поднятии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…: Π³Π΄Π΅ Π±Ρ‹ Π½ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ объявлСниС, это Ρ€Π°Π²Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ объявили Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΠ΄Π°.

Π’ этом случаС пСрСмСнная myVariable содСрТит undefined Π΄ΠΎ получСния значСния:

2. УсилСниС связности

Π‘Π²ΡΠ·Π½ΠΎΡΡ‚ΡŒ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ взаимосвязи элСмСнтов модуля (пространства ΠΈΠΌΡ‘Π½, класса, ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°). Бильная ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ элСмСнты модуля Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ Π±Ρ‹Ρ‚ΡŒ:

Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. CouplingVsCohesion tips to handle undefinded in javascript. Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ. Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ-CouplingVsCohesion tips to handle undefinded in javascript. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Undefined Ρ‡Ρ‚ΠΎ это Π·Π° ошибка ΠΊΠ°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° CouplingVsCohesion tips to handle undefinded in javascript

Π‘Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° сам ΠΏΠΎ сСбС ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ нСбольшим ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π²Ρ‹Π³ΠΎΠ΄Ρƒ ΠΈΠ· прСимущСств сильной связности, Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Π»ΠΈΠΆΠ΅ ΠΊ Π±Π»ΠΎΠΊΡƒ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚.

Π’ΠΎΡ‚ классичСский ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π΅ Π½Π°Π΄ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ:

Доступ ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ свойству

Π‘Π°ΠΌ ΠΏΠΎ сСбС доступ ΠΊ Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π° Π²ΠΎΡ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ свойства вывСдСтся ошибка:

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² особСнностях JavaScript: свойство ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСно ΠΈΠ»ΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. Π₯ΠΎΡ€ΠΎΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ β€” установка ΠΏΡ€Π°Π²ΠΈΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ Π·Π°Π΄Π°Ρ‚ΡŒ свойствам значСния.

Но Π½Π΅ всСгда Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ приходится Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π’Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ свойств Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сцСнариях, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

0 ΠΈ false β€” Π»ΠΎΠΆΠ½Ρ‹Π΅ значСния, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ if (toAppend.first)<> ΠΈ if (toAppend.last)<> фактичСски ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ с Π»ΠΎΠΆΠ½Ρ‹ΠΌΠΈ значСниями, ΠΈ эти элСмСнты Π½Π΅ Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² массив. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ исходный массив [10] Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

1. НаличиС свойства

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, JavaScript ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ мноТСство способов ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ свойство:

2. ДСструктуризация доступа ΠΊ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

ДСструктуризация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° позволяСт ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли свойство Π½Π΅ сущСствуСт: ΡƒΠ΄ΠΎΠ±Π½ΠΎ для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ прямого ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π° с undefined :

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ прСимущСства дСструктуризации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ quote() :

Π”Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ присваиваниС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ пустой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ссли Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ Π²ΠΎΠΎΠ±Ρ‰Π΅. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚Π΅ возникновСния значСния undefined Π² JavaScript.

3. Бвойство ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

Π•ΡΡ‚ΡŒ простой способ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ имя Π΅ΠΌΡƒ Spread syntax:

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Ѐункция, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ количСством Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ значСния:

Π›ΡƒΡ‡ΡˆΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ являСтся использованиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠ· ES2015:

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ΠΎ ΠΆΠ΅ происходит, Ссли return присутствуСт, Π½ΠΎ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ выраТСния рядом:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½ΡƒΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ void

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ void выполняСт Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ undefined Π²Π½Π΅ зависимости ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°:

Одним ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° void являСтся ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° выполнСния выраТСния ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ undefined Π² случаС возникновСния Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ undefined Π² массивах

Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ undefined ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ доступа ΠΊ элСмСнту массива с индСксом Π²Π½Π΅ ΠΏΡ€Π΅Π΄Π΅Π»ΠΎΠ² массива.

Π’ JavaScript Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Ρ€Π°Π·Ρ€Π΅ΠΆΡ‘Π½Π½Ρ‹ΠΌΠΈ массивами. Π­Ρ‚ΠΈ массивы ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… индСксах Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ элСмСнты. Когда Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ пустому Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² Ρ€Π°Π·Ρ€Π΅ΠΆΡ‘Π½Π½ΠΎΠΌ массивС, Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ undefined :

ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ null ΠΈ undefined Π² JavaScript

ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ undefined прСдставляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая Π΅Ρ‰Ρ‘ Π½Π΅ Π±Ρ‹Π»Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°, Π° null β€” Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠ΅ отсутствиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Допустим, пСрСмСнная number ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, Π½ΠΎ Π΅ΠΉ Π½Π΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

Π’ΠΎ ΠΆΠ΅ самоС ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ доступа ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ свойству ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

Или пСрСмСнная Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π’ этом случаС null являСтся Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΌ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. НапримСр, clone() β€” это функция, которая ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ простой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JavaScript. ΠžΠΆΠΈΠ΄Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ функция Π²Π΅Ρ€Π½Ρ‘Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

Π‘Ρ‚Ρ€ΠΎΠ³ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ равСнства === Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ undefined ΠΎΡ‚ null :

Π’Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрСсна наша ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок Π² JavaScript.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

БтратСгия Π±ΠΎΡ€ΡŒΠ±Ρ‹ с undefined Π² JavaScript:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ undefined ссылка/Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Π°Ρ внСшняя ошибка символов ΠΈ ΠΊΠ°ΠΊ Π΅Π΅ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ?

ΠšΠ°ΠΊΠΎΠ²Ρ‹ undefined ссылки/Π½Π΅Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Π΅ внСшниС ошибки символов? ΠšΠ°ΠΊΠΎΠ²Ρ‹ распространСнныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈ способы ΠΈΡ… устранСния/прСдотвращСния?

НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ/Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ свои собствСнныС.

ΠžΠ’Π’Π•Π’Π«

ΠžΡ‚Π²Π΅Ρ‚ 1

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π‘++ выполняСтся Π² нСсколько этапов, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ 2.2 (ΠΊΡ€Π΅Π΄ΠΈΡ‚Ρ‹ для ΠšΠ΅ΠΉΡ‚Π° Вомпсона для справки):

ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ срСди ΠΏΡ€Π°Π²ΠΈΠ» синтаксиса ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ„Π°Π·Π°ΠΌΠΈ [см. сноску].

[footnote] Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ вСсти сСбя Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ эти ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°Π·Ρ‹ происходили, хотя Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„Π°Π·Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ вмСстС.

Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ошибки Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π½Π° этом послСднСм этапС компиляции, Ρ‡Π°Ρ‰Π΅ всСго Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ связываниСм. Π­Ρ‚ΠΎ Π² основном ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ собрали ΠΊΡƒΡ‡Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ вмСстС.

АналогичныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… компиляторов/ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ.

создаст ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ошибки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ GCC:

ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ошибки с Microsoft Visual Studio:

ΠžΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚:

ΠžΡ‚Π²Π΅Ρ‚ 2

Π§Π»Π΅Π½Ρ‹ класса:

ДСструктор pure virtual нуТдаСтся Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ОбъявлСниС дСструктора ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ опрСдСлСния Π΅Π³ΠΎ (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ):

Π­Ρ‚ΠΎ происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ дСструкторы Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ уничтоТаСтся нСявно, поэтому трСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

virtual ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ чистыС.

Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ virtual Π±Π΅Π· опрСдСлСния, с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ чистая дСкларация Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ vtable, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° Π±Π΅Π· использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π§Ρ‚ΠΎΠ±Ρ‹ это сработало, ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ X::foo() ΠΊΠ°ΠΊ чистый:

Π§Π»Π΅Π½Ρ‹ класса

НСкоторыС Ρ‡Π»Π΅Π½Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ явно:

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° ошибка:

РСализация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ встроСнной Π² самом ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса:

ВсС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹-Ρ‡Π»Π΅Π½Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, Ссли ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ.

ΠžΠ±Ρ‰Π΅ΠΉ ошибкой являСтся ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ названия:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ

static Ρ‡Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²Π½Π΅ класса Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°:

ΠžΡ‚Π²Π΅Ρ‚ 3

ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ ссылки Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ/ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ каТдая Π΅Π΄ΠΈΠ½ΠΈΡ†Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», содСрТащий опрСдСлСния символов, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² этой Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти символы, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΈΡ… ΠΊ этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ.

Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ gcc Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ связаны вмСстС Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, ΠΈΠ»ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ вмСстС.

Для XCode: Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡƒΡ‚ΠΈ поиска Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ β†’ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡƒΡ‚ΡŒ поиска Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ β†’ ΠΏΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΡ‚Π΅ Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² ΠΏΠ°ΠΏΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π°Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ, ΠΈ Π² этом случаС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрирован. Π’ gcc Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку. Π’ MSVS Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ заставит Π΅Π³ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ автоматичСски (хотя Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚, Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΈΠ· сборки).

ΠžΡ‚Π²Π΅Ρ‚ 4

ОбъявлСно, Π½ΠΎ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ пСрСмСнная ΠΈΠ»ΠΈ функция.

Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ объявлСниС, трСбуСтся ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚:

НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС:

АналогичныС замСчания относятся ΠΊ функциям. ОбъявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· Π΅Π΅ опрСдСлСния ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС:

Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны, Ρ‡Ρ‚ΠΎΠ±Ρ‹ выполняСмая Π²Π°ΠΌΠΈ функция Ρ‚ΠΎΡ‡Π½ΠΎ соотвСтствовала Ρ‚ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ. НапримСр, Ρƒ вас ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ cv-ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹:

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ нСсоотвСтствий Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС ΠΈΠ· компилятора часто Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ»Π½ΠΎΠ΅ объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π±Ρ‹Π»Π° объявлСна, Π½ΠΎ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅ Π΅Π³ΠΎ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ каТдая Π΄Π΅Ρ‚Π°Π»ΡŒ соотвСтствуСт.

ΠžΡ‚Π²Π΅Ρ‚ 5

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ взаимозависимыС связанныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π½Π΅Π²Π΅Ρ€Π΅Π½.

Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ Π΅Ρ‰Π΅ Ρ€Π°Π·, порядок Π”ΠžΠ›Π–Π•Π!

ΠžΡ‚Π²Π΅Ρ‚ 6

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ undefined ссылка/Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΉ внСшний символ

Π― ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ «undefined ссылка/Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΉ внСшний символ».

note: я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ g++ ΠΈ Linux, ΠΈ всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ для Π½Π΅Π³ΠΎ

НапримСр, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ΄

Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

ПослС Ρ„Π°Π·Ρ‹ ассСмблСра ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Π»ΡŽΠ±Ρ‹Π΅ экспортируСмыС символы. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° символы

Π― ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΠ» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ строки ΠΈΠ· Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ значСния

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ символы для экспорта.

src2.cpp Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ экспортируСт, ΠΈ ΠΌΡ‹ Π½Π΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Π΅Π³ΠΎ символов

БвяТитС наши ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹

Π›ΠΈΠ½ΠΊΠ΅Ρ€ Π²ΠΈΠ΄ΠΈΡ‚ экспортированныС символы ΠΈ связываСт Π΅Π³ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ пытаСмся Ρ€Π°ΡΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строки Π² src2.cpp, ΠΊΠ°ΠΊ здСсь.

ΠΈ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

ОК (Π½Π΅Ρ‚ ошибок), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ссылка Π΅Ρ‰Π΅ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ

Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ нашС local_var_name статично, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ΠΎ Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π³Π»ΡƒΠ±ΠΆΠ΅. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄ Ρ„Π°Π·Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ для local_var_name Π½Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ, поэтому ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π΅Π΅ Π½Π΅ нашСл. Но ΠΌΡ‹ Ρ…Π°ΠΊΠ΅Ρ€Ρ‹:), ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ src1.s Π² тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅

Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ. Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΠΈΠΆΠ΅

ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ local_var_name ΠΈ установили Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 456789. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»

ok, см. Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран (символы)

Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ local_var_name ΠΈΠΌΠ΅Π΅Ρ‚ Bind GLOBAL (Π±Ρ‹Π» Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ)

ok, ΠΌΡ‹ Π΅Π³ΠΎ Π²Π·Π»ΠΎΠΌΠ°Π΅ΠΌ:)

ΠžΡ‚Π²Π΅Ρ‚ 7

Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° языкС C ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ΄Π΅ Π‘++.

Ѐункция (ΠΈΠ»ΠΈ пСрСмСнная) void foo() Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° C, ΠΈ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Π‘++:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π‘++ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π° Π±ΡƒΠ΄ΡƒΡ‚ искаТСны, поэтому Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΊ:

Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎ, вмСсто опрСдСлСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° C, функция (ΠΈΠ»ΠΈ пСрСмСнная) void foo() Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Π‘++, Π½ΠΎ с C-связью:

ΠΈ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π‘++-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ с Π‘++-связью.

Если вся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» (ΠΈ Π±Ρ‹Π»Π° скомпилирована ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ C); Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

ΠžΡ‚Π²Π΅Ρ‚ 8

Если всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π½Π΅ удаСтся, ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅.

НСдавно я смог ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠΉ внСшнСй ошибки Π² Visual Studio 2012, просто ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π² Π½Π°Ρ€ΡƒΡˆΠΈΠ²ΡˆΠΈΠΉ Ρ„Π°ΠΉΠ». Когда я пСрСстроил, ошибка исчСзла.

Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π΅ (ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅) Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° A пытаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ символы Π² B.lib ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ B пытаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ символы ΠΈΠ· A.lib. НичСго Π½Π΅ сущСствуСт для Π½Π°Ρ‡Π°Π»Π°. Когда Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ A, шаг ссылки Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ B.lib. A.lib Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрирован, Π½ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ dll. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ B, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΌ ΠΈ сгСнСрируСт B.lib. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Π°Ρ компиляция A Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΉΠ΄Π΅Π½ B.lib.

ΠžΡ‚Π²Π΅Ρ‚ 9

ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ/ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹/классы ΠΏΠΎ модулям /dll (спСцифичный для компилятора).

Π­Ρ‚Π° двойная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ получаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ макроса:

ΠœΠ°ΠΊΡ€ΠΎΡ THIS_MODULE Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ экспортируСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, дСкларация:

ΠΈ сообщаСт компилятору ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ содСрТит своС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Если Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ объявлСниС Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒΡΡ Π΄ΠΎ

ΠΈ сообщаСт компилятору, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ находится Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Π»ΠΈΡΡŒ (см. Ρ‚Π°ΠΊΠΆΠ΅ 1)).

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ классы ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°/экспорта:

ΠžΡ‚Π²Π΅Ρ‚ 10

Π­Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· самых Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹Ρ… сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ программист VΠ‘++ Π²ΠΈΠ΄Π΅Π» снова ΠΈ снова. Π”Π°Π²Π°ΠΉΡ‚Π΅ сначала сдСлаСм Ρ‡Ρ‘Ρ‚ΠΊΠΎΡΡ‚ΡŒ.

Π­Ρ‚ΠΎΡ‚ процСсс поиска называСтся Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ.

Π”. НаконСц, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Unresolved External Symbol? Если ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ внСшнСС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ для символа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ опрСдСлСния, ΠΎΠ½ сообщаСт ΠΎΠ± ошибкС Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ внСшнСго символа.

E. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ LNK2019: ошибка Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ внСшнСго символа. ΠœΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ эта ошибка связана с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π΅ смог Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π½Π΅ΡˆΠ½ΠΈΡ… символов, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ отсортированы ΠΊΠ°ΠΊ:

НапримСр, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ функция foo, опрСдСлСнная Π² a.cpp:

Π’ b.cpp ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ foo, поэтому Π΄ΠΎΠ±Π°Π²ΠΈΠΌ

ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ foo() ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, скаТСм bar() :

Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, Π½ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π½Π΅ добавляСтся Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ список зависимостСй (установлСнный ΠΈΠ·: Project | Properties | Configuration Properties | Linker | Input | Additional Dependency ) вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ сообщит LNK2019, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ сущСствуСт Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области поиска.

ΠžΡ‚Π²Π΅Ρ‚ 11

Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ шаблонов Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ X::foo Π² Ρ„Π°ΠΉΠ» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ мСсто, Π²ΠΈΠ΄ΠΈΠΌΠΎΠ΅ для Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°, которая Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚.

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ рСализация Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ, Π½ΠΎ спСциализация Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ объявлСна ​​ранСС.

Для дальнСйшСго объяснСния ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (явноС созданиС экзСмпляра) см. этот вопрос ΠΈ ΠΎΡ‚Π²Π΅Ρ‚.

ΠžΡ‚Π²Π΅Ρ‚ 12

нСопрСдСлСнная ссылка Π½Π° [email protected] ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ «Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ» main() Ρ‚ΠΎΡ‡ΠΊΡƒ main() Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° (особСнно для visual-studio).

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ пропустили Π²Ρ‹Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ вашСй Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ срСды IDE. IDE ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Windows с Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° (ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰Π΅ΠΉ ссылкС Π²Ρ‹ΡˆΠ΅), вмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ int main(int argc, char** argv); подпись.

Если ваша срСда IDE ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Plain Console, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ этот Ρ‚ΠΈΠΏ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ прилоТСния Windows.

Π—Π΄Π΅ΡΡŒ case1 ΠΈ case2 ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

ΠžΡ‚Π²Π΅Ρ‚ 13

Π’Π°ΠΊΠΆΠ΅, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ сторонниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ 32/64 Π±ΠΈΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹.

ΠžΡ‚Π²Π΅Ρ‚ 14

Microsoft ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ #pragma ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π½ΡƒΠΆΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π²ΠΎ врСмя ссылки;

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡƒΡ‚ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, это Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

ΠžΡ‚Π²Π΅Ρ‚ 15

ΠŸΠ°ΠΊΠ΅Ρ‚ Visual Studio NuGet Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ для Π½ΠΎΠ²ΠΎΠΉ вСрсии Π½Π°Π±ΠΎΡ€Π° инструмСнтов

Π£ мСня просто Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ libpng с Visual Studio 2013. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π±Ρ‹Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Visual Studio 2010 ΠΈ 2012.

ΠžΡ‚Π²Π΅Ρ‚ 16

Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ компиляция?

Π’Ρ‚ΠΎΡ€ΠΎΠΉ этап компиляции выполняСтся Linker.Linker Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ вСсь ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ исполняСмым ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ)

Π¨Π°Π³ΠΈ ΠΏΠΎ ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

НаблюдСниС

Как Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ

Ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компилятора:

Ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°

ΠžΡ‚Π²Π΅Ρ‚ 17

Ошибка Π² компиляторС /IDE

Π£ мСня Π½Π΅Π΄Π°Π²Π½ΠΎ Π±Ρ‹Π»Π° эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ оказалось, Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»Π° ошибка

ΠžΡ‚Π²Π΅Ρ‚ 18

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π΄ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ соврСмСнных Π»ΠΈΠ½ΠΊΠ΅Ρ€ΠΎΠ² Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСчатаСтся Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ стСпСни;

Для MSVC Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку Π»ΠΈΠ½ΠΈΠΈ добавляСтся /VERBOSE (Π² частности, /VERBOSE:LIB ).

ΠžΡ‚Π²Π΅Ρ‚ 19

Π£ мСня Π±Ρ‹Π»Π° такая ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Ρƒ мСня Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ MyProject ΠΈ TestProject. Π― эффСктивно связал Ρ„Π°ΠΉΠ» lib для MyProject с TestProject. Однако этот Ρ„Π°ΠΉΠ» lib Π±Ρ‹Π» создан, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π±Ρ‹Π»Π° построСна DLL для MyProject. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, я Π½Π΅ содСрТал исходный ΠΊΠΎΠ΄ для всСх ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² MyProject, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ доступ ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌ Π²Ρ…ΠΎΠ΄Π° Π² DLL.

ΠžΡ‚Π²Π΅Ρ‚ 20

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ люди, ΠΏΠΎΡ…ΠΎΠΆΠ΅, ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ этому вопросу, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°, я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ это здСсь.

Одна ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ошибок ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° с GCC 5.2.0 Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π° новая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ABI libstdΠ‘++.

Если Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ошибки ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΎ undefined ссылках Π½Π° символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Ρ‚ΠΈΠΏΡ‹ Π² пространствС ΠΈΠΌΠ΅Π½ std:: __ cxx11 ΠΈΠ»ΠΈ Ρ‚Π΅Π³Π΅ [abi: cxx11], Ρ‚ΠΎ это, вСроятно, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ вмСстС Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ скомпилированы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ значСния для макроса _GLIBCXX_USE_CXX11_ABI. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ происходит ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ стороннСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, которая Π±Ρ‹Π»Π° скомпилирована с Π±ΠΎΠ»Π΅Π΅ старой вСрсиСй GCC. Если сторонняя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пСрСстроСна с Π½ΠΎΠ²Ρ‹ΠΌ ABI, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свой ΠΊΠΎΠ΄ со старым ABI.

Π˜Ρ‚Π°ΠΊ, Ссли Π²Ρ‹ Π²Π΄Ρ€ΡƒΠ³ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ошибки ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Π½Π° GCC послС 5.1.0, это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ.

ΠžΡ‚Π²Π΅Ρ‚ 21

ΠžΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π²ΠΎΠΊΡ€ΡƒΠ³ GNU ld, которая Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ сцСнарии ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°

ΠžΡ‚Π²Π΅Ρ‚ 22

ΠŸΠΎΠ΄Ρ€ΡƒΠΆΠΈΡ‚ΡŒΡΡ с шаблонами.

Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π° Ρ‚ΠΈΠΏΠ° шаблона с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ (ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ) Π΄Ρ€ΡƒΠ³Π°;

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½, ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС.

Позволяя Π΄Ρ€ΡƒΠΆΠ±Π΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π½Π° всС экзСмпляры шаблонов, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Или рСализация для operator ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ опрСдСлСния класса;

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° объявлСниС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° (ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) появляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² классС, имя Π½Π΅ доступно для «Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ» поиска, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для зависимого ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° поиска, ΠΎΡ‚ cppreference;

Имя, объявлСнноС Ρ€Π°Π½Π΅Π΅ Π² объявлСнии Π΄Ρ€ΡƒΠ³Π° Π² классС ΠΈΠ»ΠΈ классС, шаблон X становится Ρ‡Π»Π΅Π½ΠΎΠΌ самого Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ пространства ΠΈΠΌΠ΅Π½ X, Π½ΠΎ нСдоступСн для поиска (ΠΊΡ€ΠΎΠΌΠ΅ зависимого ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° поиска, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ X), Ссли ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ объявлСниС Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ пространства ΠΈΠΌΠ΅Π½ прСдоставляСтся.

Π’ качСствС ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ примСчания ΠΊ ΠΎΠ±Ρ€Π°Π·Ρ†Ρƒ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°; g++ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚ ΠΎΠ± этом ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ

warning: friend declaration ‘std::ostream& operator

note: (if this is not what you intended, make sure the function template has already been declared and add <> after the function name here)

ΠžΡ‚Π²Π΅Ρ‚ 23

Π’Π°ΡˆΠ° ссылка потрСбляСт Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ относятся ΠΊ Π½ΠΈΠΌ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π² C. Они Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π‘++

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, связанный с созданной Π²Π°ΠΌΠΈ статичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ

my_lib.c

my_lib.h

eg1.c

Π’Ρ‹ создаСтС свою ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ:

Π’Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

Π’Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ Π΅Π³ΠΎ с libmy_lib.a ΠΈ сбой:

Π’ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ссли Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΈ ссылку Π·Π° ΠΎΠ΄ΠΈΠ½ шаг, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ‰ΡƒΡŽ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ сТатия libz

eg2.c

Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с libz ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ сбой:

Π’ΠΎ ΠΆΠ΅ самоС, Ссли Π²Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈ связываСтС Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·:

И Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 2 с участиСм pkg-config :

Π§Ρ‚ΠΎ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ?

Π’ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ свой Π²Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΈΡ…. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ»Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΊ Π½ΠΈΠΌ.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡΡΡ‹Π»Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 1:

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡΡΡ‹Π»Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 2:

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡΡΡ‹Π»Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 2 pkg-config :

ОбъяснСниС

Π§Ρ‚Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ здСсь.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π° привязки, сгСнСрированная GCC, Π² вашСм дистрибутивС, расходуСт Ρ„Π°ΠΉΠ»Ρ‹ Π² ссылкС слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Когда ΠΎΠ½ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» ссылаСтся Π½Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈ Π½Π΅ содСрТит опрСдСлСния для Π½Π΅Π³ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ»Π°Ρ… дальшС Π²ΠΏΡ€Π°Π²ΠΎ. Если Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΎΠ½ΠΎ Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ссылка Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π°. Если ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ссылки ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅, связь Π½Π΅ выполняСтся: ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π΅ ΠΈΡ‰Π΅Ρ‚ Π½Π°Π·Π°Π΄.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 1, со статичСской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ my_lib.a

Когда Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ eg1.o ΠΈ добавляСт Π΅Π³ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ссылок всСгда добавляСтся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄Π΅Π»Π°Π΅Ρ‚ ссылка Π½Π° hw ΠΈ Π½Π΅ содСрТит опрСдСлСния hw ; Π½ΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ связСй Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ отсутствиС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Бсылка Π½Π° hw заканчиваСтся Π½Π΅Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠΉ, ΠΈ связь Π½Π΅ выполняСтся.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 2, с ΠΎΠ±Ρ‰Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ libz

ΠžΠ±Ρ‰Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ являСтся Π°Ρ€Ρ…ΠΈΠ²ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ. Π­Ρ‚ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main ΠΈ вмСсто этого прСдоставляСт мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ опрСдСляСт, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π²ΠΎ врСмя выполнСния.

Π’ΠΎ врСмя выполнСния Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ систСмной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ копию libz Π² Ρ‚ΠΎΡ‚ ΠΆΠ΅ процСсс, Ρ‡Ρ‚ΠΎ ΠΈ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ копию вашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, для Π΅Π΅ запуска.

Но ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

НаконСц, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ pkg-config ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° 2 ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ объяснСниС. ПослС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ:

ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ снова являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ 2.

Π― ΠΌΠΎΠ³Ρƒ воспроизвСсти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1, Π½ΠΎ Π½Π΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 2

ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вас!

(Или: эта связь Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ для вас, скаТСм, Fedora 23, Π½ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Ubuntu 16.04)

Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ дистрибутив, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ссылка, являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Ρ‚Π΅Ρ…, Π½Π΅ настраиваСт свою привязку GCC для связывания раздСляСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

Π’ Ρ‚ΠΎΡ‚ ΠΆΠ΅ дСнь для UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… систСм Π±Ρ‹Π»ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ статичСскиС ΠΈ ΠΎΠ±Ρ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ. БтатичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ связСй Π±Ρ‹Π»ΠΈ связаны ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ 1, Π½ΠΎ раздСляСмыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±Ρ‹Π»ΠΈ связаны Π±Π΅Π·ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΎΡ‡Π½ΠΎ.

Π­Ρ‚ΠΎ нСэкономично Π²ΠΎ врСмя выполнСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ вмСстС с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹.

Π­Ρ‚ΠΎΡ‚ компромисс ΠΏΡ€ΠΈΠ²Π΅Π» сСгодня ΠΊ Ρ€Π°ΡΠΊΠΎΠ»ΡŒΠ½ΠΈΡ‡Π΅ΡΠΊΠΎΠΉ ситуации. НСкоторыС дистрибутивы ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ свои ΠΏΡ€Π°Π²ΠΈΠ»Π° привязки GCC для раздСляСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ примСняСтся ΠΊΠΎ всСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ. НСкоторыС дистрибутивы застряли со старым ΠΏΡƒΡ‚ΡŒ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ я всС Π΅Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π΄Π°ΠΆΠ΅ Ссли я ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽ-ссылку Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя?

Если я просто сдСлаю:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ компиляция ΠΈ привязка ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ порядок ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ связСй.

Когда Π²Ρ‹ запуститС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ‹ΡˆΠ΅, gcc выяснит, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ + связь. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π° кулисами, ΠΎΠ½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ компиляции ΠΈ запускаСт ΠΎΠ½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ привязки ΠΈ запускаСт Π΅Π΅, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π²Ρ‹ запускали Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

ΠžΡ‚Π²Π΅Ρ‚ 24

Когда ваши ΠΏΡƒΡ‚ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ

Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π»ΠΈΠ½ΠΊΠ΅Ρ€Ρ‹? Π›ΠΈΠ½ΠΊΠ΅Ρ€ соотвСтствуСт объявлСнию Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΠΎΠΌΡƒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅) с Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ (Π² ΠΎΠ±Ρ‰Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅) ΠΏΡƒΡ‚Π΅ΠΌ сравнСния ΠΈΡ… подписи. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°, Ссли ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°, Π΄Π°ΠΆΠ΅ Ссли объявлСниС ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎΡ…ΠΎΠΆΠ΅, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚? Π”Π°! Они ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π² исходном ΠΊΠΎΠ΄Π΅, Π½ΠΎ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄ΠΈΡ‚ компилятор. По сущСству, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с Ρ‚Π°ΠΊΠΎΠΉ ситуациСй:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ, хотя ΠΎΠ±Π΅ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ выглядят ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π² исходном ΠΊΠΎΠ΄Π΅, Π½ΠΎ ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π² зависимости ΠΎΡ‚ компилятора.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅, ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π½ΠΈΠΆΠ΅.

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ

И Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΈΠ΄Π΅Ρ‚Π΅ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² свой собствСнный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

Boom! Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°, ΠΈ Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Π½Π΅ удаСтся. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ±Ρ‰Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ вСрсии ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ include common_math.h (я сдСлал это ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ здСсь Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ, Π½ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ всСгда Ρ‚Π°ΠΊ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡƒΡ‚ΡŒ include отличаСтся Π² настройки компилятора).

ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°

ΠŸΡ€ΠΎΡ†Π΅ΡΡ выполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

[1] По ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ я имСю Π² Π²ΠΈΠ΄Ρƒ Π½Π°Π±ΠΎΡ€ исходных Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ для создания Π»ΠΈΠ±ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π»ΠΈΠ±ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π°.

Π Π•Π”ΠΠšΠ’Π˜Π ΠžΠ’ΠΠ’Π¬ 1: ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΡ€ΠΎΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π½ΠΈΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΌΠ½Π΅, Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ. Бпасибо!

ΠžΡ‚Π²Π΅Ρ‚ 25

ΠΠ΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ опрСдСлСния UNICODE

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, создайтС всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ UNICODE (ΠΈ _UNICODE ).

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ:

Или Π² настройках ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°;

Бвойства ΠΏΡ€ΠΎΠ΅ΠΊΡ‚a > ΠžΠ±Ρ‰ΠΈΠ΅ > ЗначСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ > Набор символов

Или Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС;

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° Ρ‚Π°ΠΊΠΆΠ΅, Ссли UNICODE Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ опрСдСлСния Π½Π΅ установлСны, ΠΈ/ΠΈΠ»ΠΈ многосимвольная настройка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΈ β€‹β€‹ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ примСняСтся.

НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ Π±Ρ‹Ρ‚ΡŒ совмСстимыми ΠΌΠ΅ΠΆΠ΄Ρƒ сборками «Release» ΠΈ «Debug».

ΠžΡ‚Π²Π΅Ρ‚ 26

ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ

«Π§ΠΈΡΡ‚Ρ‹ΠΉ» сборщик ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ «ΠΌΠ΅Ρ€Ρ‚Π²ΡƒΡŽ дрСвСсину», которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ оставлСна ​​лСТащСй Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… сборок, Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌΠΈ сборками, Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΌΠΈ сборками ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ сборки, связанными с сборкой.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС IDE ΠΈΠ»ΠΈ сборка Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ «Ρ‡ΠΈΡΡ‚ΠΎΠΉ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ настроСно (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ€ΡƒΡ‡Π½ΠΎΠΌ make Ρ„Π°ΠΉΠ»Π΅) ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния).

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ «ΠΎΡ‡ΠΈΡΡ‚ΠΊΠΈ» ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ «Ρ‡ΠΈΡΡ‚Ρ‹ΠΉ» прСуспСл, ΠΈ всС созданныС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, автоматичСский make Ρ„Π°ΠΉΠ») Π±Ρ‹Π»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.

Π­Ρ‚ΠΎΡ‚ процСсс ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π½ΠΎ часто являСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ шагом; особСнно Ссли Π½Π΅Π΄Π°Π²Π½ΠΎ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊΠΎΠ΄, связанный с ошибкой (локально ΠΈΠ»ΠΈ ΠΈΠ· исходного рСпозитория).

ΠžΡ‚Π²Π΅Ρ‚ 27

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ «extern» Π² const объявлСния/опрСдСлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π‘++)

Для людСй, ΠΏΡ€ΠΈΠ΅Π·ΠΆΠ°ΡŽΡ‰ΠΈΡ… с C, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΡΡ‚ΡŒΡŽ, Ρ‡Ρ‚ΠΎ Π² Π‘++ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ const ΠΈΠΌΠ΅ΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ (ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ) связь. Π’ C это Π½Π΅ Ρ‚Π°ΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ нСявно extern (Ρ‚.Π΅. Когда отсутствуСт ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово static ).

— ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ»Ρ‹ file2.cpp ΠΈ file1.cpp

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ const Π² Ρ„Π°ΠΉΠ»Π΅ file1.cpp с явным extern

ΠžΡ‚Π²Π΅Ρ‚ 28

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это довольно старыС вопросы с нСсколькими принятыми ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ, я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ скрытого «Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ ссылка Π½Π°».

Π Π°Π·Π½Ρ‹Π΅ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ

Π― использовал псСвдоним для ссылки Π½Π° std::filesystem::path : файловая систСма находится Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ начиная с Π‘++ 17, Π½ΠΎ моя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Π»Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π‘++ 14, поэтому я Ρ€Π΅ΡˆΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ псСвдоним:

Допустим, Ρƒ мСня Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»Π°: main.cpp, file.h, file.cpp:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² main.cpp ΠΈ file.h. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ main.cpp # include’d «file.h» послС & lt;Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы>, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Ρ‚Π°ΠΌ вСрсиСй Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы Π±Ρ‹Π»Π° вСрсия Π‘++ 17., Π― использовал для компиляции ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄:

Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

Π§Ρ‚ΠΎΠ±Ρ‹ это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, ΠΌΠ½Π΅ просто Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ & lt; ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ :: файловая систСма> Π² file.h Π½Π° & lt; Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму>.

ΠžΡ‚Π²Π΅Ρ‚ 29

ΠŸΡ€ΠΈ связывании с раздСляСмыми Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ символы Π½Π΅ скрыты.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅, внСшними, вызывая:

скрытыС/Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ символы ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ nm с символом Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистра, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ t вмСсто «T для ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°:

Подобно Windows-dll, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ опрСдСлСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ DLL_PUBLIC ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ:

Π§Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ соотвСтствуСт вСрсии Windows/MSVC:

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ видимости ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² wiki.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ, ΠΊΠ°ΠΊΠΈΠ΅ символы Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ скрыты, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

ΠžΡ‚Π²Π΅Ρ‚ 30

Π Π°Π·Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ сообщСниС ΠΊΠ°ΠΊ:

Π’ этом случаС это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ доступныС символы для Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Ρ‡Π΅ΠΌ Ρ‚Π°, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅.

Π’ Visual Studio это происходит ΠΈΠ·-Π·Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ «ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹», ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ, Π»ΠΈΠ±ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Π’ Linux это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связано с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с использованиСм lib вмСсто lib64 ).

Π’ MacOS Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ссылка ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅ вСрсии Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Π°ΠΌ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° Π΅ΡΡ‚ΡŒ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΎΠΉ lib / lib64 ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *