Програмування - це просто - delphi повідомлення компілятора

Типів повідомлення компілятора дуже багато, більше двох сотень. У даній статті я розповім про найбільш часто зустрічаються. Тож почнемо:

<Что-то1> expected but <Что-то2> found. Зазвичай це синтаксична помилка. Наприклад, пропущена скоба: відритих дужок більше, ніж закритих. В цьому випадку при компіляції програми комп'ютер повідомить: " ')' expected but ';' found ":

Програмування - це просто - delphi повідомлення компілятора

Інший часто зустрічається випадок " 'END' expected but ',' found". Це повідомлення може бути видано у разі, якщо в якості роздільника цілої та дробової частини замість точки вказали кому:

<Имя> is not a type identifier. дане <Имя> не є ім'ям типу. Така помилка виходить в разі, якщо ви намагаєтеся оголосити тип змінної, а в якості імені типу використовуєте ім'я, яке вже було використано для чого іншого. Наприклад, таким ім'ям вже оголошена змінна:

Abstract method must be virtual or dynamic. Абстрактний метод повинен бути віртуальний або динамічний. Давайте розберемося, чому він не може бути звичайним. Припустимо, ми пишемо комп'ютерну гру. У нас є якийсь клас TUnit, який призначений для відтворення "чоловічка". У нього є методи draw і undraw, які відповідно малюють і прибирають з екрану ігровий об'єкт. Припустимо, у нас є метод Go, який спочатку викликає метод Undraw, змінює його координати і запускає метод draw. Ми вирішили створити інший клас, наприклад, TAdvancedUnut, який буде виглядати трошки по іншому, і нам буде потрібно переписати у нього метод draw. Метод Go при цьому не змінюється. Вгадайте, з трьох разів, як буде працювати метод go, якщо ми його залишимо як є?

Правильно, якщо ми оголосимо метод draw віртуальним, то метод go викличе правильний метод draw, а якщо немає, то старий, той, що реалізований у TUnit. Тепер перейдемо до абстрактним методам. Уявіть собі, що TUnit - це не повноцінний клас, а тільки заготовка. Ми знаємо, що у всіх його предків (або майже у всіх), метод go буде однаковим, а draw - різним. У цьому випадку ми можемо у tUnit оголосити абстрактний метод draw. Зрозуміло, що якщо ми не оголосимо його віртуальним або динамічним, то у всіх нащадків даного класу буде викликається неіснуючий код методу draw.

Ambiguous overloaded call to <Имя блока>. Компілятор не може однозначно вибрати перевантажується блок. Змініть параметр. Таке повідомлення про помилки виникає, коли ви намагаєтеся перезавантажити процедуру або функцію з таким набором параметрів, коли неможливо зробити однозначний вибір. Наприклад, ось так:

procedure proba (a: integer; b: integer = 0); overload;
procedure proba (a: integer; b: boolean = false); overload;


Якщо ви спробуєте використовувати в подальшому процедуру proba з одним параметром, то буде видано це повідомлення:


Дійсно, звідки комп'ютер знає, що користувач мав на увазі, коли в конструкції

опустив параметр по умлчанію6 то це b: integer = 0, то чи b: boolean = false.

Assignment to FOR-loop variable <Имя>. Присвоєння значення параметру FOR-циклу в тілі циклу. Наприклад, внаслідок описки двічі використовується ім'я i в кратному циклі:

For i: = 1 to n do For i: = 1 to m do.

Треба зробити ось так:


Can not assign to / read a read-only / write-only property. Присвоєння значення властивості read / only і читання властивості write / only заборонені. Ось приклад конструкції з такою помилкою:

Програмування - це просто - delphi повідомлення компілятора


Constant expression expected. У цьому місці повинна стояти константа або константний вираз, наприклад константа вибору в структурі Case.

Ось приклад даної помилки:

Constant expression violates subrange bounds. Вихід значення константи з діапазону. Контроль не повний. Наприклад, компілятор проупстіт присвоювання x: = 4 000000000, де х має тип integer, але з начение х буде спотворено.

Constant or type identifier expected. Потрібно ім'я типу або тип-діапазон.

Ось приклад такої помилки:

У Delphi тип text не застосовується, правильно зробити так:

procedure TForm1.FormCreate (Sender: TObject);
var MyVar: TextFile;
begin

Could not compile used unit <Имя>. Компіляція приєднаного модуля <Имя> неможлива. У секції uses ви вказали файл, який система не може скомпілювати. Причини можу бути найрізноманітніші, наприклад, в цьому модулі є якісь інші помилки.

Програмування - це просто - delphi повідомлення компілятора

Declaration expected but <Что-то> found. Пропущено опис або оператор. Ось приклад даної помилки (її причина зайве слово "end" в конструкції "case"):


Програмування - це просто - delphi повідомлення компілятора

Схожі статті