Ошибка expected constructor destructor or type conversion: Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π½Π° языкС C++ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ программист, ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠ³ΠΎ спСциалиста, Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ сталкиваСтся с ΠΏΡƒΠ³Π°ΡŽΡ‰ΠΈΠΌΠΈ сообщСниями компилятора. Одной ΠΈΠ· самых распространСнных ΠΈ часто нСпонятных ошибок являСтся expected constructor, destructor, or type conversion before token. Π­Ρ‚ΠΎ сообщСниС появляСтся Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° компилятор ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ объявлСниС Ρ‡Π»Π΅Π½Π° класса, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ встрСчаСт символ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру ΠΊΠΎΠ΄Π°. ПониманиС ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ этой ошибки критичСски Π²Π°ΠΆΠ½ΠΎ для быстрого устранСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с компиляциСй.

Π‘ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ кроСтся Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компилятор тСряСт контСкст объявлСния класса. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠ½ натыкаСтся Π½Π° символ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ области видимости. Π§Π°Ρ‰Π΅ всСго Π²ΠΈΠ½ΠΎΠ²Π½ΠΈΠΊΠΎΠΌ становится пропущСнная Ρ‚ΠΎΡ‡ΠΊΠ° с запятой Π² ΠΊΠΎΠ½Ρ†Π΅ объявлСния класса ΠΈΠ»ΠΈ забытая Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ скобка. Π’ этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ возникновСния этой ошибки, ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ способы ΠΈΡ… устранСния.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Β«ΡƒΠ³Π°Π΄Π°Ρ‚ΡŒΒ» исправлСниС ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ каскаду Π΄Ρ€ΡƒΠ³ΠΈΡ… ошибок, дСлая Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ компилятора бСсполСзным. БинтаксичСский Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° β€” это Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ этап, ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΠ΄Π½Π° пропущСнная скобка способна Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ всСго модуля. ΠœΡ‹ рассмотрим Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ классичСскиС случаи, Π½ΠΎ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТныС сцСнарии, связанныС с макросами ΠΈ условной компиляциСй.

Анализ синтаксичСской структуры ошибки

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС expected constructor, destructor, or type conversion before token ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ компилятор находится Π²Π½ΡƒΡ‚Ρ€ΠΈ опрСдСлСния класса, Π½ΠΎ встрСтил Ρ‚ΠΎΠΊΠ΅Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΠΎΠΌ объявлСния Ρ‡Π»Π΅Π½Π° класса. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ΅Π½Π° базовая Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° языка Π² контСкстС области видимости класса. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ «застрял» ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ парсинг Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ контСкст Π½Π΅ Π±Ρ‹Π» Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

НаиболСС частой ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ являСтся отсутствиС Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой послС Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобки объявлСния класса. Π’ языкС C++ объявлСниС класса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… конструкций. Если этот символ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½, компилятор Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° классом ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Ρ‚Π΅Π»Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ класса, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ синтаксичСскому ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρƒ. Π’ΠΎΠΊΠ΅Π½, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ класса, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ прСпроцСссора.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΄Π΅ ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ символа:

class MyClass {

public:

int value;

}; // Π’ΠΎΡ‡ΠΊΠ° с запятой ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°!

void myFunction {

// Код Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

}

Если ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой послС Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобки класса MyClass, компилятор попытаСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ void ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΠΎ объявлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π° класса, Π½ΠΎ синтаксис Π½Π΅ совпадСт, ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ошибка. Π’Π°ΠΊΠΆΠ΅ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ использовании макросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π½Π°Ρ€ΡƒΡˆΠ°Ρ структуру Ρ„Π°ΠΉΠ»Π°.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ скобками ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ с запятой

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎ распространСнности ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ появлСния сообщСния expected constructor destructor or type conversion являСтся Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ баланса Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок. Если Π²Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π»ΠΈ класс ΠΈΠ»ΠΈ структуру, Π½ΠΎ Π·Π°Π±Ρ‹Π»ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ объявлСния, компилятор Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ находится Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ. Π­Ρ‚ΠΎ особСнно Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π³Π΄Π΅ классы ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ сотни строк ΠΊΠΎΠ΄Π°.

Часто Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой послС опрСдСлСния структуры ΠΈΠ»ΠΈ пСрСчислСния (enum). Бинтаксис C++ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ этих ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ этого символа ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄ воспринимаСтся ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ списка Ρ‡Π»Π΅Π½ΠΎΠ², Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ встрСчС с нСподходящим Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ.

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ баланса скобок ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

  • πŸ” Π’Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ всС Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки } Π² Ρ„Π°ΠΉΠ»Π΅.
  • βœ… Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобки класса стоит ;.
  • πŸ“ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ форматирования ΠΊΠΎΠ΄Π° Π² вашСй IDE для Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ контроля отступов.

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (IDE) часто ΠΏΠΎΠ΄ΡΠ²Π΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ unmatched скобки, Π½ΠΎ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π½ΠΈΡ… Π½Π΅ стоит. Π’ слоТных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с мноТСством Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… условных Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² #ifdef Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π½. АвтоматичСскоС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ структурныС нСсоотвСтствия, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ странныС отступы.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ макросы для опрСдСлСния классов ΠΈΠ»ΠΈ структур, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Β«ΡΡŠΠ΅Π΄Π°ΡŽΡ‚Β» Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ символы ΠΈΠ»ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ лишниС, Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‰ΠΈΠ΅ синтаксис.
πŸ“Š Как часто Π²Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ с этой ошибкой?
Π•ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎ
Раз в нСдСлю
Π Π΅Π΄ΠΊΠΎ
Π’ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π²ΠΈΠΆΡƒ

Ошибки Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ошибки Π² синтаксисС объявлСний Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, особСнно ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ находятся Π²Π½ΡƒΡ‚Ρ€ΠΈ классов. Если Π²Ρ‹ Π·Π°Π±Ρ‹Π»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния ΠΈΠ»ΠΈ допустили ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² спискС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π°Ρ‚ΡŒ сообщСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ оТидался конструктор ΠΈΠ»ΠΈ дСструктор. Π­Ρ‚ΠΎ происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π΅Π»Π΅ класса любоС объявлСниС Π±Π΅Π· спСцификаторов доступа ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ считаСтся Ρ‡Π»Π΅Π½ΠΎΠΌ, ΠΈ синтаксис Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π±Π΅Π·ΡƒΠΏΡ€Π΅Ρ‡Π½Ρ‹ΠΌ.

Частой ошибкой являСтся использованиС ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов языка Π² качСствС ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±Π΅Π· Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ экранирования. НапримСр, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ class ΠΈΠ»ΠΈ new Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ сбой парсСра. Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ использовании спСцификаторов доступа public, private ΠΈΠ»ΠΈ protected, Ссли послС Π½ΠΈΡ… Π·Π°Π±Ρ‹Ρ‚Ρ‹ двоСточия.

Рассмотрим Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

class DataHolder {

int size

void init; // Ошибка: ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° с запятой Π²Ρ‹ΡˆΠ΅

};

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ отсутствиС Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой послС int size заставляСт компилятор Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ void β€” это Ρ‡Π°ΡΡ‚ΡŒ объявлСния Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ пытаСтся Π½Π°ΠΉΡ‚ΠΈ конструктор ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°, Π½ΠΎ натыкаСтся Π½Π° ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово void, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ. ВсСгда провСряйтС окончания строк с объявлСниями ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° использованиС ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½. Если Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса Π²Π½Π΅ Π΅Π³ΠΎ Ρ‚Π΅Π»Π°, Π½ΠΎ Π·Π°Π±Ρ‹Π»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΈΠ»ΠΈ сдСлали это Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ похоТая ошибка. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ синтаксис опрСдСлСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π° соотвСтствуСт объявлСнию Π² классС.

β˜‘οΈ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° синтаксиса класса

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4

ВлияниС макросов ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² прСпроцСссора

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ прСпроцСссора (#define, #ifdef, #include) часто становятся скрытыми Π²ΠΈΠ½ΠΎΠ²Π½ΠΈΠΊΠ°ΠΌΠΈ синтаксичСских ошибок. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ прСпроцСссор Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄ΠΎ компиляции, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ структуру ΠΊΠΎΠ΄Π°, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΠ² символы. Если макрос ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈΠ»ΠΈ содСрТит синтаксичСскиС ошибки, Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ баланс скобок ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹.

ΠžΡΠΎΠ±ΡƒΡŽ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ макросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой, Π½ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ этого, ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, содСрТат лишниС символы. НапримСр, макрос для объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π±Π΅Π· Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС Π² мСстС Π΅Π³ΠΎ использования. Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈ условной компиляции, ΠΊΠΎΠ³Π΄Π° Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΈΠ· сборки, Π½Π°Ρ€ΡƒΡˆΠ°Ρ структуру влоТСнности.

Для диагностики ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с макросами ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ просмотра прСпроцСссированного Π²Ρ‹Π²ΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, -E Π² GCC). Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ поступаСт Π½Π° Π²Ρ…ΠΎΠ΄ компилятору. ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π²ΠΈΠ΄Π½Ρ‹ Π² исходном Ρ„Π°ΠΉΠ»Π΅, поэтому Π°Π½Π°Π»ΠΈΠ· ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° часто Π΄Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ ΠΊ Ρ€Π°Π·Π³Π°Π΄ΠΊΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ³ΠΎ макроса:

#define DECLARE_VAR(type, name) type name // НСт Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой

class Test {

DECLARE_VAR(int, value) // Ошибка синтаксиса

};

Π’ этом случаС макрос Π½Π΅ добавляСт Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой, ΠΈ компилятор Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ объявлСния. Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ макроса ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ с запятой ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ€Π΅ΡˆΠΈΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. ВсСгда провСряйтС опрСдСлСния макросов, особСнно Ссли ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ….

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ трансляционная Π΅Π΄ΠΈΠ½ΠΈΡ†Π°?

Врансляционная Π΅Π΄ΠΈΠ½ΠΈΡ†Π° β€” это исходный Ρ„Π°ΠΉΠ» послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прСпроцСссором, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ всС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. Ошибки Π² любом ΠΈΠ· Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ».

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ распространСнных ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ошибок

Для систСматизации Π·Π½Π°Π½ΠΈΠΉ ΠΈ быстрого поиска ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π³Π»Π°Π·Π°ΠΌΠΈ ΡΠ²ΠΎΠ΄Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†ΡŽ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ быстрСС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ источник ошибки, анализируя контСкст Π΅Ρ‘ появлСния. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ частыС сцСнарии ΠΈ способы ΠΈΡ… устранСния.

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

Π’ΠΈΠΏ ошибки ВСроятная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Бпособ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ
ΠŸΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° с запятой ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ; послС класса/структуры Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ; послС Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ скобки
ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ баланс скобок Π›ΠΈΡˆΠ½ΡΡ ΠΈΠ»ΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ { ΠΈΠ»ΠΈ } ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠ°Ρ€Ρ‹ скобок
Ошибка Π² макросС НСкоррСктноС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ макроса ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π·ΠΎΠ² макроса
НСвСрный синтаксис ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ошибка Π² объявлСнии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ИспользованиС соврСмСнных инструмСнтов статичСского Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° поиск Ρ‚Π°ΠΊΠΈΡ… ошибок. Они автоматичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ синтаксис ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π΅Ρ‰Π΅ Π΄ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ компиляции. БтатичСский Π°Π½Π°Π»ΠΈΠ· становится стандартом Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π°ΠΊΡ‚ΠΈΠΊΠΈ

Для прСдотвращСния появлСния ошибок Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ рСкомСндуСтся ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ написания ΠΊΠΎΠ΄Π°. ИспользованиС Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ стиля кодирования, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ ΠΈ рСгулярный Ρ€Π΅Π²ΡŒΡŽ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ синтаксичСскиС Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ Π½Π° Ρ€Π°Π½Π½ΠΈΡ… стадиях. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ компилятора (-Wall -Wextra), Ρ‡Ρ‚ΠΎ позволяСт catching большС ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π²Π°ΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΊΠΎΠ΄. Если ошибка появилась послС внСсСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ всС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ часто ΡΠ²Π»ΡΡŽΡ‚ΡΡ источником распространСния синтаксичСских ошибок ΠΏΠΎ всСму ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²:

  • πŸ›‘οΈ ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π±Π»ΠΎΠΊΠΈ скобок для условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π΄Π°ΠΆΠ΅ Ссли Ρ‚Π°ΠΌ ΠΎΠ΄Π½Π° строка.
  • πŸ”Ž Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ подсвСтку ΠΏΠ°Ρ€Π½Ρ‹Ρ… скобок Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠΎΠ΄Π°.
  • πŸ“¦ Π Π°Π·Π±ΠΈΠ²Π°ΠΉΡ‚Π΅ слоТныС макросы Π½Π° Π±ΠΎΠ»Π΅Π΅ простыС ΠΈ понятныС конструкции.

НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ компилятор ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° мСсто, Π³Π΄Π΅ ΠΎΠ½ пСрСстал ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π° Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΌ, Π³Π΄Π΅ находится сама ошибка. Часто Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° находится нСсколькими строками Π²Ρ‹ΡˆΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Π’Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· контСкста Π²ΠΎΠΊΡ€ΡƒΠ³ строки с ошибкой часто reveals ΠΈΡΡ‚ΠΈΠ½Π½ΡƒΡŽ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ быстрСС, Ρ‡Π΅ΠΌ Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ поиск.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ компиляторов ΠΈ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ вСрсии GCC, Clang ΠΈΠ»ΠΈ MSVC. ВсСгда ΡΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ΡΡŒ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ вашСй ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ toolchain.

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы (FAQ)

ΠŸΠΎΡ‡Π΅ΠΌΡƒ компилятор ΠΏΠΈΡˆΠ΅Ρ‚ ΠΏΡ€ΠΎ конструктор, Ссли я объявляю ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ?

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ expected constructor... являСтся ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΌ для ситуации, ΠΊΠΎΠ³Π΄Π° компилятор находится Π²Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ объявлСниС Ρ‡Π»Π΅Π½Π°. Он пСрСчисляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ (конструктор, дСструктор, Ρ‚ΠΈΠΏ), Π½ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ встрСчСнный Ρ‚ΠΎΠΊΠ΅Π½. Π­Ρ‚ΠΎ Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΈΠΌΠ΅Π½Π½ΠΎ Π² конструкторС.

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ эта ошибка Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΠ·-Π·Π° ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°?

Π”Π°, Π² Ρ€Π΅Π΄ΠΊΠΈΡ… случаях нСкоррСктная ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈΠ»ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ скрытых символов (BOM, Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ символы) ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ восприняты компилятором ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½Π°, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ синтаксичСской ошибкС. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ» Π²_hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΈΠ»ΠΈ смСнитС ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Π½Π° UTF-8 Π±Π΅Π· BOM.

Как быстро Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½ΡƒΡŽ скобку Π² большом Ρ„Π°ΠΉΠ»Π΅?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Β«ΡΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ всС» (fold all) Π² вашСм Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠΎΠ΄Π°. Если структура Π½Π°Ρ€ΡƒΡˆΠ΅Π½Π°, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ Π½Π΅ свСрнутся ΠΈΠ»ΠΈ свСрнутся Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π½ΠΎΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ скобок: ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ курсор Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ скобку ΠΈ посмотритС, подсвСчиваСтся Π»ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ.

ВлияСт Π»ΠΈ порядок Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° эту ΠΎΡˆΠΈΠ±ΠΊΡƒ?

Π”Π°, Ссли ΠΎΠ΄ΠΈΠ½ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» зависит ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΅Π³ΠΎ с Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ΠΌ порядка ΠΈΠ»ΠΈ Π±Π΅Π· Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹Ρ… макросов (include guards), это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ классов ΠΈΠ»ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ синтаксиса, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ошибки.