Ошибки компилятора delphi

Типов сообщений компилятора — более двухсот. Рассмотрим перечень наиболее встречающихся сообщений класса Error

  • 0. <Что-то1> expected but <Что-то2> found. Обычно это сообщение возникает при синтаксической ошибке.Например,в случае небаланса скобок,компилятор сообщит: ‘)’ expected but ‘;’ found (вместо ожидавшейся скобки найдена запятая).

    Компилятор часто сообщает, что ‘end’ ожидается,например:x:= 5,7; здесь неуместен разделитель-запятая, а сообщается про end. (‘END’ expected but ‘,’ found)

  • 1. <Имя> is not a type identifier. Данное <Имя> не является именем типа.
  • 2. ‘;’ not allowed before ‘Else’. Перед else нельзя ставить точку с запятой
  • 3. Abstract method must be virtual or dynamic. Абстрактный метод должен быть виртуальным или динамическим.
  • 4. Ambiguous overloaded call to <Имя блока>. Компилятор не может однозначно выбрать перегружаемый блок. Измените параметр.
  • 5. Array type required. Ошибка возникает в случаях, когда в индексе элемента массива указано больше уровней, чем предусмотрено описанием, и если массив не описан. Например, после объявления двумерного массива х или простой переменной х ошибочно записывают элемент х[2,1,1] (в нем показано три измерения).
  • 6. Assignment to FOR-loop variable <Имя>. Присваивание значения параметру FOR-цикла в теле цикла.

    Например, вследствие описки дважды используется имя i в кратном цикле:

    For i:= 1 to n do For i:= 1 to m do ...
    
  • 7. Break or Continue outside of loop. Break или Continue — не в цикле.
  • 8. Cannot initialize local variables. Локальные переменные запрещено инициализировать (задавать им значения при описании).
  • 9. Cannot assign to/read a read-only/write-only property. Присвоение значения свойству read/only и чтение свойства write/only запрещены.
  • 10. Constant expression expected.В этом месте должна стоять константа или константное выражение, например константа выбора в структуре Case.
  • 11. Constant expression violates subrange bounds. Выход значения константы из диапазона. Контроль не полон. Например, «сойдет с рук» присваивание x:=3000000000, где х имеет тип integer, но начение х будет искажено.
  • 12. Constant or type identifier expected. Требуется имя типа или тип-диапазон.
  • 13. Could not compile used unit <Имя>. Компиляция присоединенного модуля <Имя> невозможна.
  • 14. Data type too large. Тип определяет структуру размером более 2 Гбайт; это слишком много.
  • 15. Declaration expected but <Что-то> found. Пропущено описание или оператор.
  • 16. Declaration of <Имя> differs from previous declarations… Данный заголовок блока не соответствует упреждающему объявлению блока.
  • 17. Default parameter <Имя> must be by-value or constant. Необязательный параметр (со значением по умолчанию) не должен вызываться по ссылке.
  • 18. Expression expected. В этом месте программы должно стоять выражение.
  • 19. Expression too complicated. Выражение излишне сложно для компиляции.
  • 20. File type not allowed here. В этом месте или в этой роли файловую переменную нельзя использовать. Например, она не может быть формальным параметром-значением.
  • 21. For loop control variable must be simple local variable. Параметр цикла должен быть простой локальной (описанной в этом же блоке) переменной.
  • 22. For loop control variable must have ordinal type. Параметр цикла должен иметь порядковый тип.Вещественный тип запрещен.
  • 23. Function needs result type. В заголовке функции надо указывать тип ее результата.
  • 24. Identifier expected but <Что-то> found. В этом месте должно стоять имя. Например, пропущено имя функции после Function.
  • 25. Identifier redeclared <Имя>.<Имя> описано повторно, но в пределах блока имя можно описать лишь раз. Проверьте, не обозначена ли локальная переменная тем же именем, что и формальный параметр блока.
  • 26. Illegal character in input file <знак>. Запретный знак, например «русская» буква, либо вы оставили скобку }, убрав открывающую скобку {.
  • 27. Illegal type in Read/Readln (Write/Writeln) statement. Элемент запрещенного типа в списке ввода/вывода.
  • 28. Incompatible types <указание типов>. Несоответствие типов по присваиванию или типов операндов одной операции. Сообщение выдается и при неверном использовании структур. Например, z — запись, ошибочно записано присваивание z:= 0 (работать надо с полями записи).
  • 29. Invalid function result type. Недопустимый тип результата функции.
  • 30. Label already defined: <Метка>. <Метка> уже помечает другой оператор.
  • 31. Left side cannot be assigned to. He может быть такой левой части в присваивании. Примеры: попытка присвоить значение файловой переменной, присвоение значения формальному параметру-константе.
  • 32. Line too long. В строке программного текста больше 255 знаков.
  • 33. Low bound exceeds high bound. Нижняя граница превышает верхнюю.
  • 34. Missing operator or semicolon.Пропуск операции (например перед скобкой) или пропуск точки с запятой. При пропуске ‘;’ маркер ошибки стоит на очередном предложении (объявлении или операторе).
  • 35. Missing parameter type. He указан тип формального параметра-значения или параметра процедурного типа.
  • 36. Not enough actual parameters. He хватает фактических параметров.
  • 37. Need to specify at least one dimension … Нужно задавать в операторе SetLength хотя бы один размер динамического массива.
  • 38. Number of elements differs from declaration. Число элементов в структурной константе не соответствует ее описанию.
  • 39. Operator not applicable to this operand type. Операция не применима к операндам данного типа. Например: ‘А’ or ‘В’; ‘Text1’* ‘Text2’.
  • 40. Order of fields in record constant differs from declaration. Порядок полей в записи-константе не соответствует описанию записи.
  • 41. Ordinal type required. Требуется порядковый тип (например, в индексе).
  • 42. Out of memory. Компилятору не хватает памяти.
  • 43. Statement expected but <Что-то> found. В этом месте должен стоять оператор. Сообщение выдается во всех случаях, когда в тело блока или секцию инициализации ошибочно помещают описание (<Что-то>). Ошибочная форма обращения к процедуре Procedure <Имя> или к функции Function <Имя> также вызывает сообщение.
  • 44. Sets may have at most 256 elements. Множество (тип Set) не может содержать более 256 элементов.
  • 45. Slice standard function only allowed as open array argument. Функцию Slice можно использовать лишь как фактический параметр
  • 46. Statement not allowed in interface part. Предложения в секции интерфейса программного модуля недопустимы.
  • 47. Syntax error in real number. Синтаксическая ошибка в записи числа вещственного типа.
  • 48. There is no overload version of <Имя> that can be called with these arguments.Не предусмотрен перегружаемый блок <Имя>, который мог бы вызываться с таким аргументом. Пример: IntToStr(x), где х – выражение вещественного типа.
  • 49. Too many actual parameters. Фактических параметров больше, чем формальных.
  • 50. Type actual and formal var parameters must be identical. Тип фактического параметра должен быть идентичен типу формального параметра-переменной.
  • 51. Type of expression must be <Тип>. Выражение должно быть указанного типа. Например,после While и Until должно стоять логическое выражение.
  • 52. Undeclared identifier: <Имя>.Не описано <Имя>. Проверьте есть ли описание в нужном месте,нет ли описок в имени. Если указано имя компонента формы, проверьте,поместили ли компонент на данную форму.
  • 53. Unexpected end of file in comment started on line <N>. Неожиданный конец файла при незавершенном комментарии, начало комментария — в строке N.
  • 54. Unit name mismatch: <Имя>. Имя модуля ошибочно.
  • 55. Unsatisfied forward or external declaration <Имя>. Отсутствует описание блока, объявление которого было дано (заголовок в интерфейсе или в описании объектного типа, либо упреждающее описание).
  • 56. Unterminate string. He закрыта апострофом строка-константа типа string.

Рассмотрим также некоторые сообщения классов warning и hint.

  • Return value of function <Имя> might be undefined. В теле функции нет присваивания ее результата.
  • Variable <Имя> might not have been initialized. Указывает имя переменой, которой не задали значения.
  • For-Loop variable <Имя> may be undefined after loop. Попытка использования значения параметра For-цикла после завершения этого цикла.
  • Text after final ‘END.’ ignored by compiler. Текст, идущий за конечной строкой модуля, игнорируется компилятором.
  • Variable <Имя> is declared but never used in <Имя блока>. Обращает внимание на переменную <Имя>, описанную,но не нашедшую применения.
  • Value assigned to <Имя> never used. Хотя бы одно значение переменной <Имя> никак не использовано.

Несколько рекомендаций

Сосредотачивайтесь на первом сообщении компилятора. Исправление хотя бы одной ошибки и повторная компиляция может значительно уменьшить число сообщений об ошибках,поэтому не упорствуйте, стремясь понять сразу причину каждого сообщения.

Не удаляйте прежний вариант кода,пока не убедитесь,что ошибка устранена. Лучше на время закомментировать код,заключив его в скобки: { код }

Компилятор не анализирует, как будет выполняться программа, поэтому выход значения индекса из диапазона выявляет только если индекс задан константным выражением. Деление на ноль вообще пропускается, кроме оператора div, в случае если делитель — константное выражение.

Типов сообщений компилятора — более двухсот. Рассмотрим перечень наиболее встречающихся сообщений класса Error

0.<Что-то1> expected but <Что-то2> found. Обычно это сообщение возникает при синтаксической ошибке.Например,в случае небаланса скобок,компилятор сообщит: ‘)’ expected but ‘;’ found (вместо ожидавшейся скобки найдена запятая).
Компилятор часто сообщает, что ‘end’ ожидается,например:x:= 5,7; здесь неуместен разделитель-запятая, а сообщается про end. (‘END’ expected but ‘,’ found)

1. <Имя> is not a type identifier. Данное <Имя> не является именем типа.

2. ‘;’ not allowed before ‘Else’. Перед else нельзя ставить точку с запятой

3. Abstract method must be virtual or dynamic. Абстрактный метод должен быть виртуальным или динамическим.

4. Ambiguous overloaded call to <Имя блока>. Компилятор не может однозначно выбрать перегружаемый блок. Измените параметр.

5. Array type required. Ошибка возникает в случаях, когда в индексе элемента массива указано больше уровней, чем предусмотрено описанием, и если массив не описан. Например, после объявления двумерного массива х или простой переменной х ошибочно записывают элемент х[2,1,1] (в нем показано три измерения).

6. Assignment to FOR-loop variable <Имя>. Присваивание значения параметру FOR-цикла в теле цикла.
Например, вследствие описки дважды используется имя i в кратном цикле:
For i:= 1 to n do For i:= 1 to m do …

7. Break or Continue outside of loop. Break или Continue — не в цикле.

8. Cannot initialize local variables. Локальные переменные запрещено инициализировать (задавать им значения при описании).

9. Cannot assign to/read a read-only/write-only property. Присвоение значения свойству read/only и чтение свойства write/only запрещены.

10. Constant expression expected.В этом месте должна стоять константа или константное выражение, например константа выбора в структуре Case.

11. Constant expression violates subrange bounds. Выход значения константы из диапазона. Контроль не полон. Например, «сойдет с рук» присваивание x:=3000000000, где х имеет тип integer, но начение х будет искажено.

12. Constant or type identifier expected. Требуется имя типа или тип-диапазон.

13. Could not compile used unit <Имя>. Компиляция присоединенного модуля <Имя> невозможна.

14. Data type too large. Тип определяет структуру размером более 2 Гбайт; это слишком много.

15. Declaration expected but <Что-то> found. Пропущено описание или оператор.

16. Declaration of <Имя> differs from previous declarations… Данный заголовок блока не соответствует упреждающему объявлению блока.

17. Default parameter <Имя> must be by-value or constant. Необязательный параметр (со значением по умолчанию) не должен вызываться по ссылке.

18. Expression expected. В этом месте программы должно стоять выражение.

19. Expression too complicated. Выражение излишне сложно для компиляции.

20. File type not allowed here. В этом месте или в этой роли файловую переменную нельзя использовать.
Например, она не может быть формальным параметром-значением.

21. For loop control variable must be simple local variable. Параметр цикла должен быть простой локальной (описанной в этом же блоке) переменной.

22. For loop control variable must have ordinal type. Параметр цикла должен иметь порядковый тип.Вещественный тип запрещен.

23. Function needs result type. В заголовке функции надо указывать тип ее результата.

24. Identifier expected but <Что-то> found. В этом месте должно стоять имя. Например, пропущено имя
функции после Function.

25. Identifier redeclared <Имя>.<Имя> описано повторно, но в пределах блока имя можно описать лишь раз. Проверьте, не обозначена ли локальная переменная тем же именем, что и формальный параметр блока.

26. Illegal character in input file <знак>. Запретный знак, например «русская» буква, либо вы оставили скобку }, убрав открывающую скобку {.

27. Illegal type in Read/Readln (Write/Writeln) statement. Элемент запрещенного типа в списке ввода/вывода.

28. Incompatible types <указание типов>. Несоответствие типов по присваиванию или типов операндов одной операции. Сообщение выдается и при неверном использовании структур. Например, z — запись, ошибочно записано
присваивание z:= 0 (работать надо с полями записи).

29. Invalid function result type. Недопустимый тип результата функции.

30. Label already defined: <Метка>. <Метка> уже помечает другой оператор.

31. Left side cannot be assigned to. He может быть такой левой части в присваивании. Примеры: попытка присвоить значение файловой переменной, присвоение значения формальному параметру-константе.

32. Line too long. В строке программного текста больше 255 знаков.

33. Low bound exceeds high bound. Нижняя граница превышает верхнюю.

34. Missing operator or semicolon.Пропуск операции (например перед скобкой) или пропуск точки с запятой. При пропуске ‘;’ маркер ошибки стоит на очередном предложении (объявлении или операторе).

35. Missing parameter type. He указан тип формального параметра-значения или параметра процедурного типа.

36. Not enough actual parameters. He хватает фактических параметров.

37. Need to specify at least one dimension … Нужно задавать в операторе SetLength хотя бы один размер динамического массива.

38. Number of elements differs from declaration. Число элементов в структурной константе не соответствует ее описанию.

39. Operator not applicable to this operand type. Операция не применима к операндам данного типа. Например: ‘А’ or ‘В’; ‘Text1’* ‘Text2’.

40. Order of fields in record constant differs from declaration. Порядок полей в записи-константе не соответствует описанию записи.

41. Ordinal type required. Требуется порядковый тип (например, в индексе).

42. Out of memory. Компилятору не хватает памяти.

43. Statement expected but <Что-то> found. В этом месте должен стоять оператор. Сообщение выдается во всех случаях, когда в тело блока или секцию инициализации ошибочно помещают описание (<Что-то>). Ошибочная форма обращения к процедуре Procedure <Имя> или к функции Function <Имя> также вызывает сообщение.

44. Sets may have at most 256 elements. Множество (тип Set) не может содержать более 256 элементов.

45. Slice standard function only allowed as open array argument. Функцию Slice можно использовать лишь как фактический параметр

46. Statement not allowed in interface part. Предложения в секции интерфейса программного модуля недопустимы.

47. Syntax error in real number. Синтаксическая ошибка в записи числа вещственного типа.

48. There is no overload version of <Имя> that can be called with these arguments.Не предусмотрен перегружаемый блок <Имя>, который мог бы вызываться с таким аргументом. Пример: IntToStr(x), где х – выражение вещественного типа.

49. Too many actual parameters. Фактических параметров больше, чем формальных.

50. Type actual and formal var parameters must be identical. Тип фактического параметра должен быть идентичен типу
формального параметра-переменной.

51. Type of expression must be <Тип>. Выражение должно быть указанного типа. Например,после While и Until должно стоять логическое выражение.

52. Undeclared identifier: <Имя>.Не описано <Имя>. Проверьте есть ли описание в нужном месте,нет ли описок в имени. Если указано имя компонента формы, проверьте,поместили ли компонент на данную форму.

53. Unexpected end of file in comment started on line <N>. Неожиданный конец файла
при незавершенном комментарии, начало комментария — в строке N.

54. Unit name mismatch: <Имя>. Имя модуля ошибочно.

55. Unsatisfied forward or external declaration <Имя>. Отсутствует описание блока, объявление которого было дано (заголовок в интерфейсе или в описании объектного типа, либо упреждающее описание).

56. Unterminate string. He закрыта апострофом строка-константа типа string.

Рассмотрим также некоторые сообщения классов warning и hint.

Сосредотачивайтесь на первом сообщении компилятора. Исправление хотя бы одной ошибки и повторная компиляция может значительно уменьшить число сообщений об ошибках,поэтому не упорствуйте, стремясь понять сразу причину каждого сообщения.

Не удаляйте прежний вариант кода,пока не убедитесь,что ошибка устранена. Лучше на время закомментировать код,заключив его в скобки: { код }

Компилятор не анализирует, как будет выполняться программа, поэтому выход значения индекса из диапазона выявляет только если индекс задан константным выражением. Деление на ноль вообще пропускается, кроме оператора div, в случае если делитель — константное выражение.

При компиляции Delphi программ могут возникать различные виды ошибок. Некоторые из них включают:

  1. Синтаксические ошибки: возникают, когда в коде программы есть синтаксические ошибки, такие как неправильное использование ключевых слов, неверное написание идентификаторов, отсутствие точек с запятой в конце строк и т.д.
  2. Ошибки типа: возникают, когда в программе используется неправильный тип данных или когда типы данных не совместимы друг с другом.
  3. Ошибки логики: возникают, когда в программе есть ошибки в логике, например, когда программист допустил ошибку при расчете значения или при написании условия.
  4. Ошибки времени выполнения: возникают во время выполнения программы, когда происходят ошибки, связанные с работой с памятью, вводом-выводом или другими системными функциями.
  5. Ошибки линковки: возникают, когда компилятор не может найти необходимые библиотеки или объектные файлы, необходимые для построения исполняемого файла.
  6. Ошибки взаимодействия с ОС: возникают, когда программа пытается выполнить операции, которые не разрешены операционной системой, например, когда программа пытается получить доступ к защищенной области памяти.
  7. Ошибки ввода-вывода: возникают, когда программа не может прочитать или записать данные из файла или с других устройств ввода-вывода.

Это не полный список ошибок, которые могут возникать при компиляции Delphi программ, но эти ошибки являются наиболее распространенными.

Как исправить ошибки при компиляции Delphi программ?

Исправление ошибок при компиляции Delphi программ зависит от типа ошибки. Вот несколько общих советов, которые могут помочь в исправлении ошибок:

  1. Внимательно прочтите сообщение об ошибке: сообщение об ошибке обычно содержит информацию о том, какая ошибка возникла и в какой части кода. Внимательное прочтение сообщения об ошибке может помочь быстро определить причину ошибки.
  2. Используйте справочник Delphi: справочник Delphi содержит информацию о ключевых словах, функциях и типах данных, которые могут быть полезны при исправлении ошибок.
  3. Используйте отладчик: отладчик может помочь определить место, где возникает ошибка, и отследить значения переменных и состояние программы в этом месте.
  4. Проверьте правильность написания кода: ошибки могут возникать из-за неправильного написания кода, так что проверьте свой код на наличие синтаксических ошибок и ошибок типа.
  5. Проверьте зависимости: если ошибка связана с линковкой, убедитесь, что все необходимые библиотеки и объектные файлы доступны и правильно подключены.
  6. Проверьте правильность использования API: если ошибка связана с взаимодействием с операционной системой, убедитесь, что вы используете API правильно и не пытаетесь выполнить операции, которые не разрешены ОС.
  7. Обратитесь к сообществу: если вы не можете исправить ошибку самостоятельно, вы можете обратиться за помощью к сообществу Delphi, например, на форумах (dropcode.ru, devhubby.com) или в группах социальных сетей.

В целом, исправление ошибок при компиляции Delphi программ зависит от специфики конкретной ошибки, поэтому важно понимать, как работает ваша программа и какие функции и библиотеки вы используете.

From RAD Studio

Jump to: navigation, search

Go Up to Delphi Compiler Errors Index

This section lists all the Delphi compiler error and warning messages of RAD Studio.

Contents

  • 1 Error Messages
  • 2 Failure Messages
  • 3 Hint Messages
  • 4 Warning Messages
  • 5 X Messages

Error Messages

  • DisposeCount cannot be declared in classes with destructors (Delphi)
  • E1038 Unit identifier ‘%s’ does not match file name (Delphi)
  • E2001 Ordinal type required (Delphi)
  • E2002 File type not allowed here (Delphi)
  • E2003 Undeclared identifier ‘%s’ (Delphi)
  • E2004 Identifier redeclared ‘%s’ (Delphi)
  • E2005 ‘%s’ is not a type identifier (Delphi)
  • E2006 PACKED not allowed here (Delphi)
  • E2007 Constant or type identifier expected (Delphi)
  • E2008 Incompatible types (Delphi)
  • E2009 Incompatible types — ‘%s’ (Delphi)
  • E2010 Incompatible types — ‘%s’ and ‘%s’ (Delphi)
  • E2011 Low bound exceeds high bound (Delphi)
  • E2012 Type of expression must be BOOLEAN (Delphi)
  • E2013 Type of expression must be INTEGER (Delphi)
  • E2014 Statement expected, but expression of type ‘%s’ found (Delphi)
  • E2015 Operator not applicable to this operand type (Delphi)
  • E2016 Array type required (Delphi)
  • E2017 Pointer type required (Delphi)
  • E2018 Record, object or class type required (Delphi)
  • E2019 Object type required (Delphi)
  • E2020 Object or class type required (Delphi)
  • E2021 Class type required (Delphi)
  • E2022 Class helper type required (Delphi)
  • E2023 Function needs result type (Delphi)
  • E2024 Invalid function result type (Delphi)
  • E2025 Procedure cannot have a result type (Delphi)
  • E2026 Constant expression expected (Delphi)
  • E2027 Duplicate tag value (Delphi)
  • E2028 Sets may have at most 256 elements (Delphi)
  • E2029 %s expected but %s found (Delphi)
  • E2030 Duplicate case label (Delphi)
  • E2031 Label expected (Delphi)
  • E2032 For loop control variable must have ordinal type (Delphi)
  • E2033 Types of actual and formal var parameters must be identical (Delphi)
  • E2034 Too many actual parameters (Delphi)
  • E2035 Not enough actual parameters (Delphi)
  • E2036 Variable required (Delphi)
  • E2037 Declaration of ‘%s’ differs from previous declaration (Delphi)
  • E2038 Illegal character in input file — ‘%s’ (%s) (Delphi)
  • E2045 Bad object file format — ‘%s’ (Delphi)
  • E2049 Label declaration not allowed in interface part (Delphi)
  • E2050 Statements not allowed in interface part (Delphi)
  • E2052 Unterminated string (Delphi)
  • E2053 Syntax error in real number (Delphi)
  • E2054 Illegal type in Write/Writeln statement (Delphi)
  • E2055 Illegal type in Read/Readln statement (Delphi)
  • E2056 String literals may have at most 255 elements (Delphi)
  • E2057 Unexpected end of file in comment started on line %ld (Delphi)
  • E2058 Class, interface and object types only allowed in type section (Delphi)
  • E2059 Local class, interface or object types not allowed (Delphi)
  • E2060 Class and interface types only allowed in type section (Delphi)
  • E2061 Local class or interface types not allowed (Delphi)
  • E2062 Virtual constructors are not allowed (Delphi)
  • E2064 Left side cannot be assigned to (Delphi)
  • E2065 Unsatisfied forward or external declaration ‘%s’ (Delphi)
  • E2066 Missing operator or semicolon (Delphi)
  • E2067 Missing parameter type (Delphi)
  • E2068 Illegal reference to symbol ‘%s’ in object file ‘%s’ (Delphi)
  • E2070 Unknown directive — ‘%s’ (Delphi)
  • E2071 This type cannot be initialized (Delphi)
  • E2072 Number of elements (%d) differs from declaration (%d) (Delphi)
  • E2073 Label already defined ‘%s’ (Delphi)
  • E2074 Label declared and referenced, but not set ‘%s’ (Delphi)
  • E2075 This form of method call only allowed in methods of derived types (Delphi)
  • E2076 This form of method call only allowed for class methods (Delphi)
  • E2078 Procedure FAIL only allowed in constructor (Delphi)
  • E2079 Procedure NEW needs constructor (Delphi)
  • E2080 Procedure DISPOSE needs destructor (Delphi)
  • E2081 Assignment to FOR-Loop variable ‘%s’ (Delphi)
  • E2082 TYPEOF can only be applied to object types with a VMT (Delphi)
  • E2083 Order of fields in record constant differs from declaration (Delphi)
  • E2085 Unit name mismatch: ‘%s’ ‘%s’ (Delphi)
  • E2086 Type ‘%s’ is not yet completely defined (Delphi)
  • E2088 Variable name expected (Delphi)
  • E2089 Invalid typecast (Delphi)
  • E2090 User break — compilation aborted (Delphi)
  • E2091 Segment/Offset pairs not supported in 32-bit Delphi (Delphi)
  • E2093 Label ‘%s’ is not declared in current procedure (Delphi)
  • E2094 Local procedure/function ‘%s’ assigned to procedure variable (Delphi)
  • E2095 Missing ENDIF directive (Delphi)
  • E2096 Method identifier expected (Delphi)
  • E2097 BREAK or CONTINUE outside of loop (Delphi)
  • E2098 Division by zero (Delphi)
  • E2099 Overflow in conversion or arithmetic operation (Delphi)
  • E2100 Data type too large exceeds 2 GB (Delphi)
  • E2102 Integer constant too large (Delphi)
  • E2103 16-Bit fixup encountered in object file ‘%s’ (Delphi)
  • E2104 Bad relocation encountered in object file ‘%s’ (Delphi)
  • E2105 Inline assembler syntax error (Delphi)
  • E2106 Inline assembler stack overflow (Delphi)
  • E2107 Operand size mismatch (Delphi)
  • E2108 Memory reference expected (Delphi)
  • E2109 Constant expected (Delphi)
  • E2110 Type expected (Delphi)
  • E2111 Cannot add or subtract relocatable symbols (Delphi)
  • E2112 Invalid register combination (Delphi)
  • E2113 Numeric overflow (Delphi)
  • E2114 String constant too long (Delphi)
  • E2115 Error in numeric constant (Delphi)
  • E2116 Invalid combination of opcode and operands (Delphi)
  • E2117 486/487 instructions not enabled (Delphi)
  • E2118 Division by zero (Delphi)
  • E2119 Structure field identifier expected (Delphi)
  • E2120 LOOP/JCXZ distance out of range (Delphi)
  • E2121 Procedure or function name expected (Delphi)
  • E2122 PROCEDURE or FUNCTION expected (Delphi)
  • E2123 PROCEDURE, FUNCTION, PROPERTY, or VAR expected (Delphi)
  • E2124 Instance member ‘%s’ inaccessible here (Delphi)
  • E2125 EXCEPT or FINALLY expected (Delphi)
  • E2126 Cannot BREAK, CONTINUE or EXIT out of a FINALLY clause (Delphi)
  • E2127 ‘GOTO %s’ leads into or out of TRY statement (Delphi)
  • E2128 %s clause expected, but %s found (Delphi)
  • E2129 Cannot assign to a read-only property (Delphi)
  • E2130 Cannot read a write-only property (Delphi)
  • E2131 Class already has a default property (Delphi)
  • E2132 Default property must be an array property (Delphi)
  • E2133 TYPEINFO standard function expects a type identifier (Delphi)
  • E2134 Type ‘%s’ has no type info (Delphi)
  • E2136 No definition for abstract method ‘%s’ allowed (Delphi)
  • E2137 Method ‘%s’ not found in base class (Delphi)
  • E2138 Invalid message parameter list (Delphi)
  • E2139 Illegal message method index (Delphi)
  • E2140 Duplicate message method index (Delphi)
  • E2142 Inaccessible value (Delphi)
  • E2143 Expression has no value (Delphi)
  • E2144 Destination is inaccessible (Delphi)
  • E2145 Re-raising an exception only allowed in exception handler (Delphi)
  • E2146 Default values must be of ordinal, pointer or small set type (Delphi)
  • E2147 Property ‘%s’ does not exist in base class (Delphi)
  • E2148 Dynamic method or message handler not allowed here (Delphi)
  • E2149 Class does not have a default property (Delphi)
  • E2150 Bad argument type in variable type array constructor (Delphi)
  • E2151 Could not load RLINK32.DLL (Delphi)
  • E2152 Wrong or corrupted version of RLINK32.DLL (Delphi)
  • E2153 ‘;’ not allowed before ‘ELSE’ (Delphi)
  • E2154 Type ‘%s’ needs finalization — not allowed in variant record (Delphi)
  • E2155 Type ‘%s’ needs finalization — not allowed in file type (Delphi)
  • E2156 Expression too complicated (Delphi)
  • E2157 Element 0 inaccessible — use ‘Length’ or ‘SetLength’ (Delphi)
  • E2158 %s unit out of date or corrupted — missing ‘%s’ (Delphi)
  • E2159 %s unit out of date or corrupted — missing ‘%s.%s’ (Delphi)
  • E2160 Type not allowed in OLE Automation call (Delphi)
  • E2163 Too many conditional symbols (Delphi)
  • E2165 Compile terminated by user (Delphi)
  • E2166 Unnamed arguments must precede named arguments in OLE Automation call (Delphi)
  • E2167 Abstract methods must be virtual or dynamic (Delphi)
  • E2168 Field or method identifier expected (Delphi)
  • E2169 Field definition not allowed after methods or properties (Delphi)
  • E2170 Cannot override a non-virtual method (Delphi)
  • E2171 Variable ‘%s’ inaccessible here due to optimization (Delphi)
  • E2172 Necessary library helper function was eliminated by linker (%s) (Delphi)
  • E2173 Missing or invalid conditional symbol in ‘$%s’ directive (Delphi)
  • E2174 ‘%s’ not previously declared as a PROPERTY (Delphi)
  • E2175 Field definition not allowed in OLE automation section (Delphi)
  • E2176 Illegal type in OLE automation section: ‘%s’ (Delphi)
  • E2177 Constructors and destructors not allowed in OLE automation section (Delphi)
  • E2178 Dynamic methods and message handlers not allowed in OLE automation section (Delphi)
  • E2179 Only register calling convention allowed in OLE automation section (Delphi)
  • E2180 Dispid ‘%d’ already used by ‘%s’ (Delphi)
  • E2181 Redeclaration of property not allowed in OLE automation section (Delphi)
  • E2182 ‘%s’ clause not allowed in OLE automation section (Delphi)
  • E2183 Dispid clause only allowed in OLE automation section (Delphi)
  • E2184 %s section valid only in class types (Delphi)
  • E2185 Overriding automated virtual method ‘%s’ cannot specify a dispid (Delphi)
  • E2186 Published Real property ‘%s’ must be Single, Real, Double or Extended (Delphi)
  • E2187 Size of published set ‘%s’ is 4 bytes (Delphi)
  • E2188 Published property ‘%s’ cannot be of type %s (Delphi)
  • E2189 Thread local variables cannot be local to a function (Delphi)
  • E2190 Thread local variables cannot be ABSOLUTE (Delphi)
  • E2191 EXPORTS allowed only at global scope (Delphi)
  • E2192 Constants cannot be used as open array arguments (Delphi)
  • E2193 Slice standard function only allowed as open array argument (Delphi)
  • E2194 Cannot initialize thread local variables (Delphi)
  • E2195 Cannot initialize local variables (Delphi)
  • E2196 Cannot initialize multiple variables (Delphi)
  • E2197 Constant object cannot be passed as var parameter (Delphi)
  • E2198 %s cannot be applied to a long string (Delphi)
  • E2199 Packages ‘%s’ and ‘%s’ both contain unit ‘%s’ (Delphi)
  • E2200 Package ‘%s’ already contains unit ‘%s’ (Delphi)
  • E2201 Need imported data reference ($G) to access ‘%s’ from unit ‘%s’ (Delphi)
  • E2202 Required package ‘%s’ not found (Delphi)
  • E2203 $WEAKPACKAGEUNIT ‘%s’ contains global data (Delphi)
  • E2204 Improper GUID syntax (Delphi)
  • E2205 Interface type required (Delphi)
  • E2206 Property overrides not allowed in interface type (Delphi)
  • E2207 ‘%s’ clause not allowed in interface type (Delphi)
  • E2208 Interface ‘%s’ already implemented by ‘%s’ (Delphi)
  • E2209 Field declarations not allowed in interface type (Delphi)
  • E2210 ‘%s’ directive not allowed in in interface type (Delphi)
  • E2211 Declaration of ‘%s’ differs from declaration in interface ‘%s’ (Delphi)
  • E2212 Package unit ‘%s’ cannot appear in contains or uses clauses (Delphi)
  • E2213 Bad packaged unit format %s.%s (Delphi)
  • E2214 Package ‘%s’ is recursively required (Delphi)
  • E2215 16-Bit segment encountered in object file ‘%s’ (Delphi)
  • E2216 Can’t handle section ‘%s’ in object file ‘%s’ (Delphi)
  • E2217 Published field ‘%s’ not a class or interface type (Delphi)
  • E2218 Published method ‘%s’ contains an unpublishable type (Delphi)
  • E2220 Never-build package ‘%s’ requires always-build package ‘%s’ (Delphi)
  • E2221 $WEAKPACKAGEUNIT ‘%s’ cannot have initialization or finalization code (Delphi)
  • E2222 $WEAKPACKAGEUNIT & $DENYPACKAGEUNIT both specified (Delphi)
  • E2223 $DENYPACKAGEUNIT ‘%s’ cannot be put into a package (Delphi)
  • E2224 $DESIGNONLY and $RUNONLY only allowed in package unit (Delphi)
  • E2225 Never-build package ‘%s’ must be recompiled (Delphi)
  • E2226 Compilation terminated; too many errors (Delphi)
  • E2227 Imagebase is too high — program exceeds 2 GB limit (Delphi)
  • E2228 A dispinterface type cannot have an ancestor interface (Delphi)
  • E2229 A dispinterface type requires an interface identification (Delphi)
  • E2230 Methods of dispinterface types cannot specify directives (Delphi)
  • E2231 ‘%s’ directive not allowed in dispinterface type (Delphi)
  • E2232 Interface ‘%s’ has no interface identification (Delphi)
  • E2233 Property ‘%s’ inaccessible here (Delphi)
  • E2234 Getter or setter for property ‘%s’ cannot be found (Delphi)
  • E2236 Constructors and destructors must have %s calling convention (Delphi)
  • E2237 Parameter ‘%s’ not allowed here due to default value (Delphi)
  • E2238 Default value required for ‘%s’ (Delphi)
  • E2239 Default parameter ‘%s’ must be by-value or const (Delphi)
  • E2240 $EXTERNALSYM and $NODEFINE not allowed for ‘%s’; only global symbols (Delphi)
  • E2241 C++ obj files must be generated (-jp) (Delphi)
  • E2242 ‘%s’ is not the name of a unit (Delphi)
  • E2245 Recursive include file %s (Delphi)
  • E2246 Need to specify at least one dimension for SetLength of dynamic array (Delphi)
  • E2247 Cannot take the address when compiling to byte code (Delphi)
  • E2248 Cannot use old style object types when compiling to byte code (Delphi)
  • E2249 Cannot use absolute variables when compiling to byte code (Delphi)
  • E2250 There is no overloaded version of ‘%s’ that can be called with these arguments (Delphi)
  • E2251 Ambiguous overloaded call to ‘%s’ (Delphi)
  • E2252 Method ‘%s’ with identical parameters already exists (Delphi)
  • E2253 Ancestor type ‘%s’ does not have an accessible default constructor (Delphi)
  • E2254 Overloaded procedure ‘%s’ must be marked with the ‘overload’ directive (Delphi)
  • E2255 New not supported for dynamic arrays — use SetLength (Delphi)
  • E2256 Dispose not supported (nor necessary) for dynamic arrays (Delphi)
  • E2257 Duplicate implements clause for interface ‘%s’ (Delphi)
  • E2258 Implements clause only allowed within class types (Delphi)
  • E2259 Implements clause only allowed for properties of class or interface type (Delphi)
  • E2260 Implements clause not allowed together with index clause (Delphi)
  • E2261 Implements clause only allowed for readable property (Delphi)
  • E2262 Implements getter must be %s calling convention (Delphi)
  • E2263 Implements getter cannot be dynamic or message method (Delphi)
  • E2264 Cannot have method resolutions for interface ‘%s’ (Delphi)
  • E2265 Interface ‘%s’ not mentioned in interface list (Delphi)
  • E2266 Only one of a set of overloaded methods can be published (Delphi)
  • E2267 Previous declaration of ‘%s’ was not marked with the ‘overload’ directive (Delphi)
  • E2268 Parameters of this type cannot have default values (Delphi)
  • E2270 Published property getters and setters must have %s calling convention (Delphi)
  • E2271 Property getters and setters cannot be overloaded (Delphi)
  • E2272 Cannot use reserved unit name ‘%s’ (Delphi)
  • E2273 No overloaded version of ‘%s’ with this parameter list exists (Delphi)
  • E2274 property attribute ‘label’ cannot be used in dispinterface (Delphi)
  • E2275 property attribute ‘label’ cannot be an empty string (Delphi)
  • E2276 Identifier ‘%s’ cannot be exported (Delphi)
  • E2277 Only external cdecl functions may use varargs (Delphi)
  • E2278 Cannot take address of local symbol %s (Delphi)
  • E2279 Too many nested conditional directives (Delphi)
  • E2280 Unterminated conditional directive (Delphi)
  • E2281 Type not allowed in Variant Dispatch call (Delphi)
  • E2282 Property setters cannot take var parameters (Delphi)
  • E2283 Too many local constants. Use shorter procedures (Delphi)
  • E2284 Duplicate resource name type %d ‘%s’ (Delphi)
  • E2285 Duplicate resource id type %d id %d (Delphi)
  • E2286 Coverage library name is too long: %s (Delphi)
  • E2287 Cannot export ‘%s’ multiple times (Delphi)
  • E2288 File name too long (exceeds %d characters) (Delphi)
  • E2289 Unresolved custom attribute %s (Delphi)
  • E2290 Cannot mix destructors with IDisposable (Delphi)
  • E2291 Missing implementation of interface method %s.%s (Delphi)
  • E2292 ‘%s’ must reference a property or field of class ‘%s’ (Delphi)
  • E2293 Cannot have both a DLLImport attribute and an external or calling convention directive (Delphi)
  • E2294 A class helper that descends from ‘%s’ can only help classes that are descendents ‘%s’ (Delphi)
  • E2295 A class helper cannot introduce a destructor (Delphi)
  • E2296 A constructor introduced in a class helper must call the parameterless constructor of the helped class as the first statement (Delphi)
  • E2298 read/write not allowed for CLR events. Use Include/Exclude procedure (Delphi)
  • E2299 Property required (Delphi)
  • E2300 Cannot generate property accessor ‘%s’ because ‘%s’ already exists (Delphi)
  • E2301 Method ‘%s’ with identical parameters and result type already exists (Delphi)
  • E2306 ‘Self’ is initialized more than once (Delphi)
  • E2307 NEW standard function expects a dynamic array type identifier (Delphi)
  • E2308 Need to specify at least one dimension for NEW of dynamic array (Delphi)
  • E2309 Attribute — Known attribute named argument cannot be an array (Delphi)
  • E2310 Attribute — A custom marshaler requires the custom marshaler type (Delphi)
  • E2311 Attribute — MarshalAs fixed string requires a size (Delphi)
  • E2312 Attribute — Invalid argument to a known attribute (Delphi)
  • E2313 Attribute — Known attribute cannot specify properties (Delphi)
  • E2314 Attribute — The MarshalAs attribute has fields set that are not valid for the specified unmanaged type (Delphi)
  • E2315 Attribute — Known custom attribute on invalid target (Delphi)
  • E2316 Attribute — The format of the GUID was invalid (Delphi)
  • E2317 Attribute — Known custom attribute had invalid value (Delphi)
  • E2318 Attribute — The MarshalAs constant size cannot be negative (Delphi)
  • E2319 Attribute — The MarshalAs parameter index cannot be negative (Delphi)
  • E2320 Attribute — The specified unmanaged type is only valid on fields (Delphi)
  • E2321 Attribute — Known custom attribute has repeated named argument (Delphi)
  • E2322 Attribute — Unexpected type in known attribute (Delphi)
  • E2323 Attribute — Unrecognized argument to a known custom attribute (Delphi)
  • E2324 Attribute — Known attribute named argument doesn’t support variant (Delphi)
  • E2325 Attribute ‘%s’ is not valid on this target (Delphi)
  • E2326 Attribute ‘%s’ can only be used once per target (Delphi)
  • E2327 Linker error while emitting attribute ‘%s’ for ‘%s’ (Delphi)
  • E2328 Linker error while emitting metadata (Delphi)
  • E2329 Metadata — Error occured during a read (Delphi)
  • E2330 Metadata — Error occured during a write (Delphi)
  • E2331 Metadata — File is read only (Delphi)
  • E2332 Metadata — An ill-formed name was given (Delphi)
  • E2333 Metadata — Data value was truncated (Delphi)
  • E2334 Metadata — Old version error (Delphi)
  • E2335 Metadata — A shared mem open failed to open at the originally (Delphi)
  • E2336 Metadata — Create of shared memory failed. A memory mapping of the same name already exists (Delphi)
  • E2337 Metadata — There isn’t .CLB data in the memory or stream (Delphi)
  • E2338 Metadata — Database is read only (Delphi)
  • E2339 Metadata — The importing scope is not compatible with the emitting scope (Delphi)
  • E2340 Metadata — Data too large (Delphi)
  • E2341 Metadata — Column cannot be changed (Delphi)
  • E2342 Metadata — Too many RID or primary key columns, 1 is max (Delphi)
  • E2343 Metadata — Primary key column may not allow the null value (Delphi)
  • E2344 Metadata — Data too large (Delphi)
  • E2345 Metadata — Attempt to define an object that already exists (Delphi)
  • E2346 Metadata — A guid was not provided where one was required (Delphi)
  • E2347 Metadata — Bad binary signature (Delphi)
  • E2348 Metadata — Bad input parameters (Delphi)
  • E2349 Metadata — Cannot resolve typeref (Delphi)
  • E2350 Metadata — No logical space left to create more user strings (Delphi)
  • E2351 Final methods must be virtual or dynamic (Delphi)
  • E2352 Cannot override a final method (Delphi)
  • E2353 Cannot extend sealed class ‘%s’ (Delphi)
  • E2354 String element cannot be passed to var parameter (Delphi)
  • E2355 Class property accessor must be a class field or class static method (Delphi)
  • E2356 Property accessor must be an instance field or method (Delphi)
  • E2357 PROCEDURE, FUNCTION, or CONSTRUCTOR expected (Delphi)
  • E2358 Class constructors not allowed in class helpers (Delphi)
  • E2359 Multiple class constructors in class %s: %s and %s (Delphi)
  • E2360 Class constructors cannot have parameters (Delphi)
  • E2361 Cannot access private symbol %s.%s (Delphi)
  • E2362 Cannot access protected symbol %s.%s (Delphi)
  • E2363 Only methods of descendent types may access protected symbol %s%s.%s across assembly boundaries (Delphi)
  • E2366 Global procedure or class static method expected (Delphi)
  • E2370 Cannot use inherited methods for interface property accessors (Delphi)
  • E2371 ABSTRACT and FINAL cannot be used together (Delphi)
  • E2372 Identifier expected (Delphi)
  • E2373 Call to abstract method %s.%s (Delphi)
  • E2374 Cannot make unique type from %s (Delphi)
  • E2375 PRIVATE or PROTECTED expected (Delphi)
  • E2376 STATIC can only be used on non-virtual class methods (Delphi)
  • E2377 Unable to locate Borland.Delphi.Compiler.ResCvt.dll (Delphi)
  • E2378 Error while converting resource %s (Delphi)
  • E2379 Virtual methods not allowed in record types (Delphi)
  • E2380 Instance or class static method expected (Delphi)
  • E2381 Resource string length exceeds Windows limit of 4096 characters (Delphi)
  • E2382 Cannot call constructors using instance variables (Delphi)
  • E2383 ABSTRACT and SEALED cannot be used together (Delphi)
  • E2385 Error while signing assembly (Delphi)
  • E2386 Invalid version string ‘%s’ specified in %s (Delphi)
  • E2387 The key container name ‘%s’ does not exist (Delphi)
  • E2388 Unrecognized strong name key file ‘%s’ (Delphi)
  • E2389 Protected member ‘%s’ is inaccessible here (Delphi)
  • E2390 Class must be sealed to call a private constructor without a type qualifier (Delphi)
  • E2391 Potentially polymorphic constructor calls must be virtual (Delphi)
  • E2392 Can’t generate required accessor method(s) for property %s.%s due to name conflict with existing symbol %s in the same scope (Delphi)
  • E2393 Invalid operator declaration (Delphi)
  • E2394 Parameterless constructors not allowed on record types (Delphi)
  • E2395 Unsafe procedure only allowed if compiling with $UNSAFECODE ON (Delphi)
  • E2396 Unsafe code only allowed in unsafe procedure (Delphi)
  • E2397 Unsafe pointer only allowed if compiling with $UNSAFECODE ON (Delphi)
  • E2398 Class methods in record types must be static (Delphi)
  • E2399 Namespace conflicts with unit name ‘%s’ (Delphi)
  • E2400 Unknown Resource Format ‘%s’ (Delphi)
  • E2402 Constructing instance of abstract class ‘%s’ (Delphi)
  • E2403 Add or remove accessor for event ‘%s’ cannot be found (Delphi)
  • E2404 Cannot mix READ/WRITE property accessors with ADD/REMOVE accessors (Delphi)
  • E2405 Unknown element type found importing signature of %s.%s (Delphi)
  • E2406 EXPORTS section allowed only if compiling with $UNSAFECODE ON (Delphi)
  • E2407 Duplicate resource identifier %s found in unit %s(%s) and %s(%s) (Delphi)
  • E2408 Can’t extract strong name key from assembly %s (Delphi)
  • E2409 Fully qualified nested type name %s exceeds 1024 byte limit (Delphi)
  • E2410 Unsafe pointer variables, parameters or consts only allowed in unsafe procedure (Delphi)
  • E2411 Unit %s in package %s refers to unit %s which is not found in any package. Packaged units must refer only to packaged units (Delphi)
  • E2412 CREATE expected (Delphi)
  • E2413 Dynamic array type needed (Delphi)
  • E2414 Disposed_ cannot be declared in classes with destructors (Delphi)
  • E2415 Could not import assembly ‘%s’ because it contains namespace ‘%s’ (Delphi)
  • E2416 Could not import package ‘%s’ because it contains system unit ‘%s’ (Delphi)
  • E2417 Field offset cannot be determined for variant record because previous field type is unknown size record type (Delphi)
  • E2418 Type ‘%s’ needs initialization — not allowed in variant record (Delphi)
  • E2419 Record type too large: exceeds 1 MB (Delphi)
  • E2420 Interface ‘%s’ used in ‘%s’ is not yet completely defined (Delphi)
  • E2422 Imported identifier ‘%s’ conflicts with ‘%s’ in namespace ‘%s’ (Delphi)
  • E2423 Void type not usable in this context (Delphi)
  • E2424 Codepage ‘%s’ is not installed on this machine (Delphi)
  • E2425 Inline methods must not be virtual nor dynamic (Delphi)
  • E2426 Inline function must not have asm block (Delphi)
  • E2428 Field ‘%s’ needs initialization — not allowed in CLS compliant value types (Delphi)
  • E2429 Duplicate implementation for ‘set of %s’ in this scope (Delphi)
  • E2430 for-in statement cannot operate on collection type ‘%s’ (Delphi)
  • E2431 for-in statement cannot operate on collection type ‘%s’ because ‘%s’ does not contain a member for ‘%s’, or it is inaccessible (Delphi)
  • E2432 %s cannot be applied to a rectangular dynamic array (Delphi)
  • E2433 Method declarations not allowed in anonymous record or local record type (Delphi)
  • E2434 Property declarations not allowed in anonymous record or local record type (Delphi)
  • E2435 Class member declarations not allowed in anonymous record or local record type (Delphi)
  • E2436 Type declarations not allowed in anonymous record or local record type (Delphi)
  • E2437 Constant declarations not allowed in anonymous record or local record type (Delphi)
  • E2439 Inline function must not have open array argument (Delphi)
  • E2441 Inline function declared in interface section must not use local symbol ‘%s’ (Delphi)
  • E2442 Inline directive not allowed in constructor or destructor (Delphi)
  • E2447 Duplicate symbol ‘%s’ defined in namespace ‘%s’ by ‘%s’ and ‘%s’ (Delphi)
  • E2448 An attribute argument must be a constant expression, typeof expression or array constructor (Delphi)
  • E2449 Inlined nested routine ‘%s’ cannot access outer scope variable ‘%s’ (Delphi)
  • E2450 There is no overloaded version of array property ‘%s’ that can be used with these arguments (Delphi)
  • E2452 Unicode characters not allowed in published symbols (Delphi)
  • E2453 Destination cannot be assigned to (Delphi)
  • E2454 Slice standard function not allowed for VAR nor OUT argument (Delphi)
  • E2459 Class property accessor must not have field selector (Delphi)
  • E2460 Cannot inherit from special class ‘%s.%s’ (Delphi)
  • E2461 Identifier ‘%s’ is not an instance field (Delphi)
  • E2463 ‘%s’ directive not allowed in record type (Delphi)
  • E2464 First parameter of Assign operator must be var parameter (Delphi)
  • E2465 A record cannot introduce a destructor (Delphi)
  • E2466 Never-build package ‘%s’ requires always-build package ‘%s’ (Delphi)
  • E2467 Record or object type required (Delphi)
  • E2468 Linker detected duplicate name ‘%s’ made from type ‘%s’ in both unit ‘%s’ and ‘%s’ (Delphi)
  • E2469 Linker detected duplicate name ‘%s’ made from both type ‘%s’ in unit ‘%s’ and type ‘%s’ in unit ‘%s’ (Delphi)
  • E2470 Linker detected duplicate name ‘%s’ made from type ‘%s’ in unit ‘%s’ and conflicting with compiler generated class name for unit ‘%s’ (Delphi)
  • E2471 Possibly parameterless constructors not allowed on record types (Delphi)
  • E2474 Record type required (Delphi)
  • E2475 ‘%s’ directive not allowed in record helper type (Delphi)
  • E2501 Inline function cannot call nested routine ‘%s’ (Delphi)
  • E2506 Method of parameterized type declared in interface section must not use local symbol ‘%s’ (Delphi)
  • E2507 CLASS constraint and RECORD constraint cannot be specified together (Delphi)
  • E2508 type parameters not allowed on this type (Delphi)
  • E2510 Type ‘%s’ is not a valid constraint (Delphi)
  • E2511 Type parameter ‘%s’ must be a class type (Delphi)
  • E2512 Type parameter ‘%s’ must be a non-nullable value type (Delphi)
  • E2513 Type parameter ‘%s’ must have one public parameterless constructor named Create (Delphi)
  • E2514 Type parameter ‘%s’ must support interface ‘%s’ (Delphi)
  • E2515 Type parameter ‘%s’ is not compatible with type ‘%s’ (Delphi)
  • E2516 Constraint ‘%s’ is conflicting with previous constraints (Delphi)
  • E2517 Operator ‘%s’ must take %d parameter(s) (Delphi)
  • E2518 Operator ‘%s’ must take least one ‘%s’ type in parameters (Delphi)
  • E2519 First parameter type of operator ‘%s’ and result type must be identical (Delphi)
  • E2520 Result type of operator ‘%s’ must be Boolean type (Delphi)
  • E2521 Operator ‘%s’ must take one ‘%s’ type in parameter or result type (Delphi)
  • E2522 Operator ‘%s’ can not convert to/from ancestor type (Delphi)
  • E2527 Helper type ‘%s’ cannot be used in declarations (Delphi)
  • E2528 Type parameters not allowed on this method (Delphi)
  • E2529 Type parameters not allowed on operator (Delphi)
  • E2530 Type parameters not allowed on global procedure or function (Delphi)
  • E2531 Method ‘%s’ requires explicit type argument(s) (Delphi)
  • E2532 Couldn’t infer generic type argument from different argument types for method ‘%s’ (Delphi)
  • E2533 Virtual, dynamic and message methods cannot have type parameters (Delphi)
  • E2534 Class constructor must not be virtual, dynamic nor message (Delphi)
  • E2535 Interface methods must not have parameterized methods (Delphi)
  • E2537 DEFAULT standard function expects a type identifier (Delphi)
  • E2538 DEFAULT standard function not allowed for this type (Delphi)
  • E2539 Missing implementation for abstract method ‘%s.%s’ (Delphi)
  • E2540 Cannot seal abstract type ‘%s’ (Delphi)
  • E2543 Instantiated data type ‘%s’ too large: exceeds 2 GB (Delphi)
  • E2545 Cannot publish class property ‘%s’ — only instance properties can be published (Delphi)
  • E2548 Cannot take a class reference of parameterized type (Delphi)
  • E2549 Cannot declare parameterized type derived from custom attribute class (Delphi)
  • E2556 Type of procedure result or untyped parameter cannot be used as type argument (Delphi)
  • E2551 There is no type parameterized methods of ‘%s’ that can be used with these number of type parameters (Delphi)
  • E2552 CLASS or RECORD constraint and class type constraint cannot be specified together (Delphi)
  • E2553 Class type constraint cannot be specified more than once (Delphi)
  • E2555 Cannot capture symbol ‘%s’ (Delphi)
  • E2560 $OBJTYPENAME not allowed for ‘%s’; only global and non-alias type symbol (Delphi)
  • E2561 Specified options for $EXTERNALSYM and $NODEFINE are not allowed for ‘%s’; only global and non-alias type symbol (Delphi)
  • E2562 Field identifier required (Delphi)
  • E2563 Specified interface type is not declared (Delphi)
  • E2564 Undefined type ‘%s’ (Delphi)
  • E2565 Cannot use parameterized or instantiated type as custom attribute (Delphi)
  • E2568 Can’t create new instance without CONSTRUCTOR constraint in type parameter declaration (Delphi)
  • E2569 Type parameter ‘%s’ may need finalization — not allowed in variant record. Consider using RECORD constraint (Delphi)
  • E2570 Local procedure in generic method or method of generic type is not supported (Delphi)
  • E2571 Type parameter ‘%s’ doesn’t have class or interface constraint (Delphi)
  • E2572 RTTI visibility set constant expression of type System.TRttiVisibility expected (Delphi)
  • E2573 Illegal value for the ALIGN directive (valid for one of 1, 2, 4, 8 or 16) (Delphi)
  • E2574 Instantiated type can not be used for TYPE’d type declaration (Delphi)
  • E2575 RTTI for ‘%s’ is too large; reduce scope with $RTTI or reduce type size (Delphi)
  • E2584 Weak attribute only allowed on fields and variables of type class or interface: ‘%s’ (Delphi)
  • E2589 Helper type can not be declared in parameterized type context (Delphi)
  • E2590 Linker option string too long (Delphi)
  • E2591_Only cdecl functions may use varargs (Delphi)
  • E2597 ‘%s’ (Delphi)
  • E2598 Virtual methods not allowed in record helper types (Delphi)
  • E2599 Field definition not allowed in helper type (Delphi)
  • E2601 Procedure NEW needs constructor identifier of ‘%s’, but undeclared identifier ‘%s’ found (Delphi)
  • E2602 Procedure DISPOSE needs destructor identifier of ‘%s’, but undeclared identifier ‘%s’ found (Delphi)
  • E2603 Constraint ‘%s’ cannot be specified more than once (Delphi)
  • Linker error: %s (Delphi)
  • Linker error: %s: %s (Delphi)

Failure Messages

  • F1027 Unit not found ‘%s’ or binary equivalents (%s) (Delphi)
  • F2039 Could not create output file ‘%s’ (Delphi)
  • F2040 Seek error on ‘%s’ (Delphi)
  • F2046 Out of memory (Delphi)
  • F2047 Circular unit reference to ‘%s’ (Delphi)
  • F2048 Bad unit format — ‘%s’ (Delphi)
  • F2051 Unit %s was compiled with a different version of %s.%s (Delphi)
  • F2063 Could not compile used unit ‘%s’ (Delphi)
  • F2069 Line too long (more than 1023 characters) (Delphi)
  • F2084 Internal Error — %s%d (Delphi)
  • F2087 System unit incompatible with trial version (Delphi)
  • F2092 Program or unit ‘%s’ recursively uses itself (Delphi)
  • F2220 Could not compile package ‘%s’ (Delphi)
  • F2438 UCS-4 text encoding not supported. Convert to UCS-2 or UTF-8 (Delphi)
  • F2446 Unit ‘%s’ is compiled with unit ‘%s’ in ‘%s’ but different version ‘%s’ found (Delphi)
  • F2458 Cannot import metadata from Delphi ‘library’. Use packages instead (Delphi)
  • F2462 Framework %s does not support thread local variables (%s.%s) (Delphi)
  • F2613 Unit ‘%s’ not found. (Delphi)

Hint Messages

To disable or enable the hints messages, see the $HINTS directive and the IDE support for controlling the hints and warnings.

  • H2077 Value assigned to ‘%s’ never used (Delphi)
  • H2135 FOR or WHILE loop executes zero times — deleted (Delphi)
  • H2164 Variable ‘%s’ is declared but never used in ‘%s’ (Delphi)
  • H2219 Private symbol ‘%s’ declared but never used (Delphi)
  • H2235 Package ‘%s’ does not use or export ‘%s.%s’ (Delphi)
  • H2244 Pointer expression needs no Initialize/Finalize — need ^ operator? (Delphi)
  • H2365 Override method %s.%s should match case of ancestor %s.%s (Delphi)
  • H2368 Visibility of property accessor method %s should match property %s.%s (Delphi)
  • H2369 Property accessor %s should be %s (Delphi)
  • H2384 CLS: overriding virtual method ‘%s.%s’ visibility (%s) must match base class ‘%s’ (%s) (Delphi)
  • H2440 Inline method visibility is not lower or same visibility of accessing member ‘%s.%s’ (Delphi)
  • H2443 Inline function ‘%s’ has not been expanded because unit ‘%s’ is not specified in USES list (Delphi)
  • H2444 Inline function ‘%s’ has not been expanded because accessing member ‘%s’ is inaccessible (Delphi)
  • H2445 Inline function ‘%s’ has not been expanded because its unit ‘%s’ is specified in USES statement of IMPLEMENTATION section and current function is inline function or being inline function (Delphi)
  • H2456 Inline function ‘%s’ has not been expanded because contained unit ‘%s’ uses compiling unit ‘%s’ (Delphi)
  • H2457 Inline function ‘%s’ has not been expanded because contained unit ‘%s’ uses compiling unit ‘%s’ indirectly (Delphi)
  • H2505 ‘Self’ is uninitialized. An inherited constructor must be called before entering a try block (Delphi)
  • H2509 Identifier ‘%s’ conflicts with type parameters of container type (Delphi)
  • H2596 ‘%s’ (Delphi)

Warning Messages

  • W1000 Symbol ‘%s’ is deprecated (Delphi)
  • W1001 Symbol ‘%s’ is specific to a library (Delphi)
  • W1002 Symbol ‘%s’ is specific to a platform (Delphi)
  • W1003 Symbol ‘%s’ is experimental (Delphi)
  • W1004 Unit ‘%s’ is specific to a library (Delphi)
  • W1005 Unit ‘%s’ is specific to a platform (Delphi)
  • W1006 Unit ‘%s’ is deprecated (Delphi)
  • W1007 Unit ‘%s’ is experimental (Delphi)
  • W1009 Redeclaration of ‘%s’ hides a member in the base class (Delphi)
  • W1010 Method ‘%s’ hides virtual method of base type ‘%s’ (Delphi)
  • W1011 Text after final ‘END.’ — ignored by compiler (Delphi)
  • W1013 Constant 0 converted to NIL (Delphi)
  • W1014 String constant truncated to fit STRING%ld (Delphi)
  • W1015 FOR-Loop variable ‘%s’ cannot be passed as var parameter (Delphi)
  • W1016 Typed constant ‘%s’ passed as var parameter (Delphi)
  • W1017 Assignment to typed constant ‘%s’ (Delphi)
  • W1018 Case label outside of range of case expression (Delphi)
  • W1021 Comparison always evaluates to False (Delphi)
  • W1022 Comparison always evaluates to True (Delphi)
  • W1023 Comparing signed and unsigned types — widened both operands (Delphi)
  • W1024 Combining signed and unsigned types — widened both operands (Delphi)
  • W1029 Duplicate %s ‘%s’ with identical parameters will be inacessible from C++ (Delphi)
  • W1031 Package ‘%s’ will not be written to disk because -J option is enabled (Delphi)
  • W1032 Exported package threadvar ‘%s.%s’ cannot be used outside of this package (Delphi)
  • W1034 $HPPEMIT ‘%s’ ignored (Delphi)
  • W1035 Return value of function ‘%s’ might be undefined (Delphi)
  • W1036 Variable ‘%s’ might not have been initialized (Delphi)
  • W1037 FOR-Loop variable ‘%s’ may be undefined after loop (Delphi)
  • W1039 No configuration files found (Delphi)
  • W1040 Implicit use of Variants unit (Delphi)
  • W1041 Error converting Unicode char to locale charset. String truncated. Is your LANG environment variable set correctly (Delphi)
  • W1042 Error converting locale string ‘%s’ to Unicode. String truncated. Is your LANG environment variable set correctly (Delphi)
  • W1043 Imagebase $%X is not a multiple of 64k. Rounding down to $%X (Delphi)
  • W1044 Suspicious typecast of %s to %s (Delphi)
  • W1045 Property declaration references ancestor private ‘%s.%s’ (Delphi)
  • W1046 Unsafe type ‘%s%s%s’ (Delphi)
  • W1047 Unsafe code ‘%s’ (Delphi)
  • W1048 Unsafe typecast of ‘%s’ to ‘%s’ (Delphi)
  • W1049 value ‘%s’ for option %s was truncated (Delphi)
  • W1050 WideChar reduced to byte char in set expressions (Delphi)
  • W1051 Duplicate symbol names in namespace. Using ‘%s.%s’ found in %s. Ignoring duplicate in %s (Delphi)
  • W1055 Published caused RTTI ($M+) to be added to type ‘%s’ (Delphi)
  • W1057 Implicit string cast from ‘%s’ to ‘%s’ (Delphi)
  • W1058 Implicit string cast with potential data loss from ‘%s’ to ‘%s’ (Delphi)
  • W1059 Explicit string cast from ‘%s’ to ‘%s’ (Delphi)
  • W1060 Explicit string cast with potential data loss from ‘%s’ to ‘%s’ (Delphi)
  • W1061 Narrowing given WideChar constant (‘%s’) to AnsiChar lost information (Delphi)
  • W1062 Narrowing given wide string constant lost information (Delphi)
  • W1063 Widening given AnsiChar constant (‘%s’) to WideChar lost information (Delphi)
  • W1064 Widening given AnsiString constant lost information (Delphi)
  • W1066 Lost Extended floating point precision. Reduced to Double (Delphi)
  • W1067 Unable to load DLL ‘%s’ (Delphi)
  • W1068 Modifying strings in place may not be supported in the future (Delphi)
  • W1069 Feature will not be available in mobile Delphi compiler (Delphi)
  • W1070 Use of untyped pointer can disrupt instance reference counts (Delphi)
  • W1071 Implicit integer cast with potential data loss from ‘%s’ to ‘%s’ (Delphi)
  • W1072 Implicit conversion may lose significant digits from ‘%s’ to ‘%s’ (Delphi)
  • W1073 Combining signed type and unsigned 64-bit type — treated as an unsigned type (Delphi)
  • W1074 Unknown Custom Attribute (Delphi)
  • W1201 XML comment on ‘%s’ has badly formed XML-‘Whitespace is not allowed at this location.’ (Delphi)
  • W1202 XML comment on ‘%s’ has badly formed XML- ‘Reference to undefined entity ‘%s» (Delphi)
  • W1203 XML comment on ‘%s’ has badly formed XML-‘A name was started with an invalid character.’ (Delphi)
  • W1204 XML comment on ‘%s’ has badly formed XML-‘A name contained an invalid character.’ (Delphi)
  • W1205 XML comment on ‘%s’ has badly formed XML-‘The character ‘%c’ was expected.’ (Delphi)
  • W1206 XML comment on ‘%s’ has cref attribute ‘%s’ that could not be resolved (Delphi)
  • W1207 XML comment on ‘%s’ has a param tag for ‘%s’, but there is no parameter by that name (Delphi)
  • W1208 Parameter ‘%s’ has no matching param tag in the XML comment for ‘%s’ (but other parameters do) (Delphi)

X Messages

These messages can be either errors or warnings, and the appropriate initial letter (E or W) takes the place of the x in the message number.

  • x1008 Integer and HRESULT interchanged (Delphi)
  • x1012 Constant expression violates subrange bounds (Delphi)
  • x1019 For loop control variable must be simple local variable (Delphi)
  • x1020 Constructing instance of ‘%s’ containing abstract method ‘%s.%s’ (Delphi)
  • x1025 Unsupported language feature: ‘%s’ (Delphi)
  • x1026 File not found ‘%s’ (Delphi)
  • x1028 Bad global symbol definition ‘%s’ in object file ‘%s’ (Delphi)
  • x1030 Invalid compiler directive — ‘%s’ (Delphi)
  • x1033 Unit ‘%s’ implicitly imported into package ‘%s’ (Delphi)
  • x1054 Linker error: %s (Delphi)
  • x1056 Duplicate resource Type %s, ID %s; File %s resource kept; file %s resource discarded (Delphi)
  • x2041 Read error on ‘%s’ (Delphi)
  • x2042 Write error on ‘%s’ (Delphi)
  • x2043 Close error on ‘%s’ (Delphi)
  • x2044 Chmod error on ‘%s’ (Delphi)
  • x2141 Bad file format ‘%s’ (Delphi)
  • x2161 %s (Delphi)
  • x2162 %s: %s (Delphi)
  • x2243 Expression needs no Initialize/Finalize (Delphi)
  • x2269 Overriding virtual method ‘%s.%s’ has lower visibility (%s) than base class ‘%s’ (%s) (Delphi)
  • x2367 Case of property accessor method %s.%s should be %s.%s (Delphi)
  • x2421 Imported identifier ‘%s’ conflicts with ‘%s’ in ‘%s’ (Delphi)

2003 г

Hints and Warnings, или Спасение утопающих

Елена Филиппова, Королевство Дельфи
15 апреля 2003г.

Содержание:

  • Типы сообщений компилятора
  • Безобидные Hints
  • О пользе сообщений компилятора
  • Коварные Warnings

Каждая программа содержит по крайней мере одну ошибку
Народная мудрость

Никогда не делает ошибок тот, кто просто ничего не делает. Это тоже народная мудрость. Поэтому с ошибками в коде
сталкивается в своей работе каждый программист. После того, как программа успешно откомпилирована, преодолен первый этап
борьбы. :о)

Не секрет, что гораздо сложнее бороться с ошибками, возникающими во время выполнения
программы, особенно, когда они приводят не просто к ее «падению», а к неадекватной работе, наслаивая проблемы и создавая «наведенные» ошибки.
И здесь уже надежды на компилятор нет… Спасение утопающих, как известно, дело рук этих самых утопающих.

Материал данной статьи не имеет отношения к теме тестирования и отладки.
Он предназначен начинающим программистам, дабы обратить их внимание на «соломинку», которую протягивает утопающим
IDE Delphi в нелегком деле борьбы с ошибками :о) Ведь не зря же ее называют дружественной средой
разработки.

Хочу сразу обратить ваше внимание на то, что все приводимые примеры не являются реальными, они специально упрощены и только иллюстрируют
объяснение материала.

Типы сообщений компилятора

Информацию о результате компиляции и сборки программы можно увидеть в окне, показывающем
процесс компиляции (рис. 1), и на панели сообщений, встроенной в редактор кода (рис. 2).

Результат компиляции проекта
рис. 1
Сообщения компилятора бывают трех типов. В этом списке они приведены по убыванию степени опасности, если так можно выразиться :о)

  1. Error — ошибка
  2. Warning — предупреждение
  3. Hint — подсказка или совет.

Довольно распространенное отношение начинающих программистов к этим сообщениям заключается в полном игнорировании
предупреждений и советов. Ведь не ошибки же? Программа откомпилирована и запускается на исполнение.
И, может быть, даже работает :о)

Мне приходилось встречать на некоторых форумах «дружеские советы» новичкам, сводившиеся к предложению «не обращать на эту ерунду
внимания, это оптимизатор у Delphi выделывается.»

Так ли это на самом деле?

При наличии в проекте ошибок-Errors, не будет сформирован исполняемый файл и, волей не волей, ошибки придется исправлять. Наличие
же сообщений Hints и Warnings позволяет запускать приложение.
Обратите внимание на окно процесса компиляции (рис. 1),
в строке «Done» написано не Compiled, что, в общем-то, ожидалось, а предупреждение There are warnings.
Несмотря на отсутствие ошибок, проект откомпилирован с тремя «подсказками» и пятью «предупреждениями».
Насколько безопасно не обращать на это внимание?

Начнем с самых безобидных сообщений компилятора, с его советов — Hints.

Безобидные(?) Hints

Ниже приведен код простой функции, которая не содержит синтаксических ошибок, но при её компиляции
будет получено три Hint’а (в коде они отмечены красным). Давайте разберем их подробно.

Function FunctonName( Code : String) : Integer;
Var i,j  : Integer; ‹——  Variable 'i' is declared but never used in 'FunctonName'
Begin
  j:=0;  ‹—— Value assigned to 'j' never used  
  
  For j:=0 To -1 Do Writeln(j);  ‹——   FOR or WHILE loop executes zero times - deleted
  
  Result:=StrToInt(Code);
End;
Variable ‘i’ is declared but never used in ‘FunctonName’
Переменная ‘i’ определена, но никогда не используется в ‘FunctonName’ — это одно из самых часто встречающихся
сообщений. Чаще всего оно просто говорит о неаккуратном коде. Однако, наличие таких переменных в принципе может
означать потенциальную ошибку в реализации алгоритма, ведь зачем-то она была объявлена. Именно поэтому компилятор обращает ваше внимание на эту переменную: вдруг вы просто забыли доделать задуманное?

Простейшее решение — удалить все неиспользованные переменные. А заодно и проверить, действительно ли они не нужны :о)
Value assigned to ‘j’ never used
Значение, присвоенное ‘j’ никогда не используется.
Это сообщение не означает, что программа неправильная — оно означает только то, что компилятор обнаружил, что после присвоения переменной j значения 0, эта переменная не участвует
более ни в каких операциях.
Что делает это присвоение абсолютно бессмысленным.
И, если используется оптимизатор, оно будет удалено в откомпилированном коде.

Так же, как и предыдущий Hint, это сообщение чаще всего является
признаком «мусора» в коде, от которого следует избавляться, чтобы не пропустить потенциальные ошибки.
Опасность в том, что в реальности может оказаться, что это присвоение было сделано не той переменной, которой нужно. Например, надо было присвоить что-то переменной i, а присвоили j.

FOR or WHILE loop executes zero times — deleted
Цикл FOR или WHILE исполняется ноль раз — удалено. Собственно, текст этого сообщения полностью объясняет ситуацию.
Конечно же это не специально, это «рука дрогнула», «глаз замылился» или что-то в таком духе. И компилятору остается только сказать спасибо.

Итак, получается, что Hint’ы обращают наше внимание на странности и несуразицы в коде с точки зрения «правильного» компилятора.
Конечно, приведенный пример очень прост и надуман и может не убедить вас, но
если в коде функции, которая содержит не один десяток операторов, появляется hint, стоит обратить на него внимание, поверьте.

Рассмотренные выше ситуации можно и нужно исправлять.
Но бывают случаи, когда нет возможности исправить код так, чтобы
не получать Hint’s при компиляции.
Рассмотрим небольшой пример по созданию собственных классов:

Type
  TLists = class(TList)
  Protected
    procedure Clear; override;  ‹—— Overriding virtual method 'TLists.Clear' 
	has a lower visibility (private) than base class (public)
  End;

  TExLists = class(TList)
  Private
    Function FutureTools(Sender : TObject) : Boolean;  ‹—— Private symbol 'FutureTools' declared but never used
  Public
    ...
  End;
Overriding virtual method ‘TLists.Clear’ has a lower visibility (private) than base class (public)
Переопределенный виртуальный метод ‘TLists.Clear’ имеет видимость ниже, чем в базовом классе
Это не то, чтобы ошибка, но на практике понижение видимости свойств и методов класса
встречается довольно редко и говорит об ошибках на этапе проектирования базовых классов. Это понижение видимости
может создать в проблему в будущем, если от класса TLists будут наследоваться при создании новых классов.
Private symbol ‘FutureTools’ declared but never used
Приватный символ ‘FutureTools’ определен, но никогда не используется. Это сообщение
сродни уже описанному Variable ‘<name>’ is declared but never used…
Так как этот метод приватный, то он
по определению не может быть доступен нигде более, как внутри класса. Тем не менее, компилятор там его использования не обнаруживает. Из чего следует естественный вывод, что функция ‘FutureTools’
нигде не будет использоваться.

Допустим, что в этом случае все не так просто, как это видится компилятору и функция FutureTools, например, нигде не используется вовсе не потому, что вы о ней забыли или она никому не нужна.
Возможно это задел на будущее. Можно, конечно, закомментировать и объявление функции и код ее реализации до поры до времени.
Но можно сделать и иначе, несколько изящнее.

Возможно, что по условию конкретной
задачи понижение видимости метода в классе TLists оправдано, а корректировать код базового класса нет возможности,
тогда придется попросить компилятор не принимать во внимание эту ситуацию.

Как раз для таких случаев предусмотрена сцециальная дирректива компилятора: {$HINTS OFF}.
Она отключает проверку кода на предмет обнаружения Hint’ов
до тех пор, пока в коде не встретится обратная дирректива — {$HINTS ON}.
Если в обрамленном этими специальными комментариями коде и будут «опасные» Hint-ситуации, они будут игнорироваться компилятором.

Воспользовавшись этими диррективами, мы получим код, который компилируется
не только без ошибок, но и без Hint’ов:

Type
 
  TLists = class(TList)
  Private
    procedure Clear; override; 
  End;
 

  TExLists = class(TList)
  Private
  
    Function FutureTools(Sender : TObject) : Boolean;  
  
  Public
    ...
  End;

Примечание:
Не поддавайтесь искушению раз и навсегда «заткнуть» с помощью {$HINTS OFF} упрямый компилятор, пользы
от этого вам, как программисту, не будет никакой…

О пользе сообщений компилятора

Небольшое лирическое отступление:

В каждом уважающем себя форуме есть список вопросов, признанных как off-topic. Часть из них сто раз уже разжевана, часть
решается нажатием клавиши F1 и так далее. На каждом форуме борятся с ними по-своему, но, к огромному сожалению, задающих такие вопросы не становится меньше.
Более того, вопрошающие частенько еще и обижаются, когда их отсылают :о)
Вот пример классического off-topic’а:

Привет Алл! Пишу код 

s:tstrings;
s:=tstrings.create;
s.insert(... // здесь ОШИБКА! Какой-то Abstract Error 
s.clear;

Господа подскажите что делать? 

В ответ на такой вопрос, господа, как правило, начинают страшно ругаться. :о) Самые вежливые слова, которые получает автор вопроса,
звучат примерно так — «Сколько же можно?! Хелп когда научитесь читать?!» На что автор, как ему кажется, абсолютно справедливо, начинает
огрызаться, что типа, откуда ему было знать, что такое абстрактный метод и что на этом самом TStrings не написано, какие у него
методы!

Проведем маленький эксперимент и напишем такой код:

Procedure AbstractMethod;
Var Buffer : TStrings;
Begin

  Buffer:=TStrings.Create; ‹—— Constructing instance of 'TStrings' containing abstract methods
  Buffer.LoadFromFile('test.txt');
  Buffer.Free;

End;

При компиляции нам будет выдан warning, как раз на той строке, где создается экземпляр класса — Constructing instance of ‘TStrings’ containing abstract methods.
Я надеюсь, что текст этого предупреждения абсолютно ясен и не требует пояснений…

Смотрите, что получается, ошибок компиляции нет, человек с высоко поднятой головой игнорирует «всю эту ерунду» и просто не обращает
внимания на предупреждения компилятора! В итоге, он получает ошибку времени выполнения, некоторое личное недоумение, кучу словесных
тычков и подзатыльников на форуме. А ведь его предупреждали! :о)


рис. 2

IDE Delphi, как дружественная среда программирования, кроме обычного факта уведомления о сообщениях компилятора,
предоставляет дополнительные возможности — если дважды кликнуть на тексте сообщения (рис. 2), то курсор автоматически переместиться
на ту строку в редакторе кода, в которой, по мнению компилятора, возникает спорная ситуация. Если же на тексте
сообщения (hint или warning) нажать F1, то откроется
окно справочной системы (рис. 3) по конкретному hint’у или warning’у. Там будет описано, в каких случаях компилятор выдает
такое сообщение и что Delphi вообще «думает» по этому поводу.


рис. 3

Коварные Warnings

Предупреждения-warnings обладают гораздо более высоким уровнем опасности с точки зрения компилятора.
История с абстрактным классом служит тому примером.
Разберем еще несколько случаев возникновения warning‘ов:

Return value of function ‘VarCompare’ might be undefined
Значение результата функции ‘VarCompare’ может быть неопределено.
Function VarCompare(Index1, Index2: Integer): Integer;
Begin									   
   IF Index1 = Index2 Then Result:=0;
   IF Index1 < Index2 Then Result:=-1;
   IF Index1 > Index2 Then Result:=1;
End; ‹——Return value of function 'VarCompare' might be undefined

Казалось бы, с точки зрения логики в тексте функции все верно. Перекрыты все возможные случаи и сообщение компилятора
выглядит несколько неуместно. Но не стоит ждать от него слишком много, компилятор не может (да и не обязан) вникать
в логику программы. Для того, чтобы избавиться от этого сообщения, было бы правильно переписать это код.
Например, вот так:

Function VarCompare(Index1, Index2: Integer): Integer;
Begin
   IF Index1 = Index2
   Then Result:=0
   Else IF Index1 < Index2
        Then Result:=-1
        Else Result:=1;
End;

В итоге и компилятор «отстанет», и код будет более читабельным.
Это сообщение только на первый взгляд кажется безобидным, ниже приведен пример, в котором возникает аналогичное предупреждение и
содержится реальная ошибка — если возникнет исключительная ситуация при открытии файла, результат функции, действительно, не будет определен.
В итоге это скажется при выполнении программы, когда ошибки никто не будет ожидать.

Function ReadList( FileName : String) : Boolean ;
Var Stream    : TFileStream;
Begin
   IF FileExists(FileName)
   Then Try
          Stream:=TFileStream.Create(FileName , fmOpenRead);
          
          Stream.Free;
          Result:=True;
        Except          
        End
   Else Result:=False;

End;‹——Return value of function 'ReadList' might be undefined

Правильный вариант:

Function ReadList( FileName : String) : Boolean ;
Var Stream    : TFileStream;
Begin
   IF FileExists(FileName)
   Then Try
          Stream:=TFileStream.Create(FileName , fmOpenRead);
          
          Stream.Free;
          Result:=True;
        Except          
          Result:=False;
        End
   Else Result:=False;

End;

Еще один пример коварного warning‘а:

Variable ‘list’ might not have been initialized
Переменная ‘list’ может быть не инициализирована.
Function SomethingList( Text : String) : Integer;
Var list    : TStringList;
Begin
  IF Text <> '' Then
  Begin
    list:=TStringList.Create;
    list.CommaText:=Text;
  End;

  Result:=list.Count; ‹—— Variable 'list' might not have been initialized

  list.Free;
End;

Совершенно справедливое замечание.
Если во время работы программы в функцию будет передана пустая строка, нам обеспечен знаменитый Access violation.

Вернемся еще раз к примеру с определением собственных классов.

  TExLists = class(TList)
  Public
    procedure Clear;  ‹—— Method 'Clear' hides virtual method of base type 'TList'
  End;
Method ‘Clear’ hides virtual method of base type ‘TList’
Метод ‘Clear’ прячет виртуальный метод базового класса ‘TList’.
Эта ситуация буквально означает перекрытие виртуального метода родительского класса.
То есть, в классе TExLists определен статический метод, имя которого совпадает с виртуальным методом родительского
класса TList.
Если в дальнейшем, от класса TExLists будут наследоваться, то метод Clear для этих наследников
будет закрыт.

Правильный вариант:

  TExLists = class(TList)
  Public
    procedure Clear; override;
  End;

Точно также, как и в случае с hint’ами, существуют опции для отключения сообщений компилятора о предупреждениях — {$WARNINGS OFF},
и для их включения — {$WARNINGS ON}. И точно так же хочу обратить внимание на нежелательность использования этих опций без нужды.
Молчание компилятора в этом случае не будет означать отсутствие проблемы :о)

Резюме

Цель этого материала, не рассказать обо всех возможных hint‘ах и warning‘ах, их список слишком велик
для одной статьи, а обратить внимание на необходимость анализировать ВСЕ сообщения компилятора в ваших программах.

Елена Филиппова
Специально для Королевства Delphi

0 / 0 / 0

Регистрация: 04.06.2023

Сообщений: 2

1

Как исправить ошибки компиляции?

04.06.2023, 11:45. Показов 328. Ответов 8


Студворк — интернет-сервис помощи студентам

ошибка

Миниатюры

Как исправить ошибки компиляции?
 



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

04.06.2023, 11:45

Ответы с готовыми решениями:

Исправить ошибки компиляции
Здравствуйте, уважаемые и Заранее Спасибо. На данном форуме как и в Delphi являюсь новичком….

Как исправить ошибки?
Задача звучит так
Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран группы…

Как исправить ошибки?
Определить, является ли введенное четырехзначное число палиндромом (палиндром читается одинаково…

Как исправить ошибки?
вот ошибки

сама программа:
unit Unit1;

interface

uses
Windows, Messages, SysUtils,…

Как исправить ошибки?
Здравствуйте! мне 12 лет и я решил попытаться освоить дельфу, но при написании своей первой…

8

Модератор

8490 / 5650 / 2290

Регистрация: 21.01.2014

Сообщений: 24,238

Записей в блоге: 3

04.06.2023, 12:25

2

Korolevskiy0, уберите строки между первым (включительно) и вторым (его оставить) begin



0



3439 / 2082 / 662

Регистрация: 29.05.2013

Сообщений: 8,932

04.06.2023, 13:30

3

а точнее с 8 по 14 строки удалите из кода.



0



Модератор

3382 / 1953 / 709

Регистрация: 15.11.2015

Сообщений: 7,806

04.06.2023, 15:06

4

Удивительное рядом…



0



0 / 0 / 0

Регистрация: 04.06.2023

Сообщений: 2

Вчера, 05:31

 [ТС]

5

удалил строки

Миниатюры

Как исправить ошибки компиляции?
 



0



AzAtom

Модератор

3382 / 1953 / 709

Регистрация: 15.11.2015

Сообщений: 7,806

Вчера, 06:02

6

Цитата
Сообщение от Korolevskiy0
Посмотреть сообщение

удалил строки

В строке 7 в конце поставь точку с запятой:

Delphi
1
  Unit3 in 'Unit3.pas' {Form3};



0



D1973

Модератор

8490 / 5650 / 2290

Регистрация: 21.01.2014

Сообщений: 24,238

Записей в блоге: 3

Вчера, 11:08

7

и перед

Delphi
1
begin

не забыть прописать директиву

Delphi
1
{$R *.res}



0



AzAtom

Модератор

3382 / 1953 / 709

Регистрация: 15.11.2015

Сообщений: 7,806

Вчера, 11:20

8

С 3 формами файл проекта выглядит так:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
program Project1;
 
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3};
 
{$R *.res}
 
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.Run;
end.

Файл проекта неплохо правит сама Delphi, и новичку обычно нет необходимости там что-то вручную править.



0



D1973

Модератор

8490 / 5650 / 2290

Регистрация: 21.01.2014

Сообщений: 24,238

Записей в блоге: 3

Вчера, 11:45

9

Хотя очень странно он выглядит для 11-й версии; вот в 10.4 выглядит так, в 11-й — аналогично:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
program Project1;
 
uses
  Vcl.Forms, // <<==
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3};
 
{$R *.res}
 
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True; // <<==
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.Run;
end.

очередное старье, которое пытаются в новой версии открыть?



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

Вчера, 11:45

Помогаю со студенческими работами здесь

Как исправить ошибки?
Всем привет. При компиляции этого кода

procedure TForm3.Button1Click(Sender: TObject);
var

Как исправить ошибки в коде
Поспособствуйте, пожалуйста, разобраться в чем причина ошибок:
Unit1.pas(157): Missing operator…

Delphi выдает ошибки, как исправить?
Помогите пожалуйста, новичок в этом
Выдает ошибки

unit Unit1;

interface

uses
Windows,…

Как исправить ошибки, чтобы запускалась программа?
Я не понимаю в чем проблема. Вроде всё написал как в лабе было

unit Unit1;

interface

Как исправить ошибки, чтобы запускалась программа?
Я не понимаю в чем проблема. Вроде всё написал как в лабе было

unit Unit1;

interface

uses…

Ошибки компиляции
Код:
unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

9

Часть II. Delphi

Enter

Получение элементом управления

фокуса

Exit

Потеря элементом управления

фокуса

Текст сообщения

Причина ошибки

Array type required

Требуется массив.

Assignment to FOR-Loop variable

Переменная — параметр цикла FOR

‘<Имя>’

не может изменяться внутри цикла.

Assignment to FOR-Loop variable

Переменная — параметра цикла

‘<Имя>’

FOR может иметь неопределённое

значение после выполнения этого

цикла.

Case label outside of range of case

Значения указанные в операторе

expression

CASE таковы, что селектор не может

их принимать.

Compile terminated by user

Компиляция прервана

пользователем клавишами Ctrl и

Break.

Constant expression expected

Ожидалось выражение состоящее

из одних констант.

Constant expression violates

Константное выражение выходит

subrange bounds

за пределы заданного интервала.

Could not create output file

Невозможно создать exe-файл.

Declaration of <Имя> differs from

Текущее декларирование

previous declaration

отличается от предыдущего.

Division by zero

Выполняется деление на нуль.

Duplicate case label

Значения в операторе CASE

повторяются.

EXCEPT or FINALLY expected

Ожидается секция исключений

оператора TRY.

Expression has no value

Выражение не возвращает после

себя никакого значения.

File not found: ‘<Имя_файла>.dcu’

Файл внешнего модуля не был

обнаружен в текущем каталоге.

Часть II. Delphi

File not found: <Имя_файла>

Не был найден указанный файл.

File type not allowed here

Файловый тип в данном месте не

позволителен. Файловая переменная

может передаваться в подпрограмму

только как параметр — переменная.

FOR-Loop variable ‘<Имя>’ cannot

Переменная — параметр цикла не

be passed as var parameter

может передаваться в подпрограмму

как параметр. Она должна быть

описана локально.

For loop control variable must be

Переменная — параметр цикла FOR

simple local variable

должна быть описана локально.

For loop control variable must have

Переменная параметра цикла FOR

ordinal type

может быть целого, символьного

либо перечислимого типов.

FOR or WHILE loop executes zero

Цикл FOR или WHILE не будет

times — deleted

выполняться ни разу и поэтому

удален.

Function needs result type

Была определена функция в

которой не определено

результирующее значение.

Identifier redeclared: ‘<Имя>’

Повторно был описан указанный

идентификатор. Все имена в

программе должны быть уникальны.

Illegal character in input file:

В программе были обнаружены

‘<Символ>’ ($)

недопустимые символы.

Illegal type in Read/Readln statement

Несовместимость типов при

вызове оператора ввода.

Illegal type in Write/Writeln statement

Несовместимость типов при

вызове оператора вывода.

Inaccessible value

Значение данной переменной не

доступно либо не определено.

Incompatible types

Несовместимость типов.

Incompatible types: ‘<Тип1>’ and

Имеет место несовместимость

‘<Тип2>’

указанных типов.

Internal error: <Код_ошибки>

Внутренняя ошибка.

Invalid function result type

Была определена функция, в

которой выходное значение не

совместимо по типу с указанным в

Часть II. Delphi

заголовке.

Label already defined:

Указанная метка уже была

‘<Имя_метки>’

определена.

Left side cannot be assigned to

Имеет место попытка изменить

значение константы.

Line too long (more than 255

Строка слишком длинна.

characters)

Low bound exceeds high bound

Нижняя граница диапазона

определена большей чем верхняя

граница.

Method identifier expected

Требуется указать название

метода.

Missing operator or semicolon

Пропущен оператор либо точка с

запятой.

Missing parameter type

Формальные параметры

подпрограммы даны без указания

типов.

Not enough actual parameters

При вызове какой — либо

процедуры или функции было

указано недостаточное количество

фактических параметров.

Object type required

Требуется объект.

Operator not applicable to this

Оператор не предназначен для

operand type

работы с операндами данного типа.

Ordinal type required

В данном месте требуется

скалярный тип.

Pointer type required

Требуется указатель.

Procedure cannot have a result type

Процедура не может иметь

результирующего значения. В таких

случаях нужно использовать

функцию.

PROCEDURE or FUNCTION

В данном месте ожидается

expected

процедура либо функция.

Record, object or class type required

Требуется запись, объект или

класс.

Return value of function

Выходное значение указанной

‘<Имя_функции>’ might be undefined

функции может быть не определено.

Statement expected, but expression

Ожидался оператор, но было

Часть II. Delphi

of type ‘<Тип>’ found

обнаружено выражение указанного

типа.

String constant truncated to fit

Строковая константа укорочена.

STRING[<Номер>]

Syntax error in real number

Ошибка при написании

действительного числа.

Text after final ‘END.’ — ignored by

Текст, написанный в программе

compiler

после последнего END был

игнорирован.

Too many actual parameters

При вызове какой — либо

процедуры или функции было

указано слишком большое

количество фактических

параметров.

Type of expression must be

Тип выражения должен быть

BOOLEAN

логическим. Имеет место

несовместимость типов.

Type of expression must be

Тип выражения должен быть

INTEGER

целым. Имеет место

несовместимость типов.

Types of actual and formal var

Типы формальных и фактических

parameters must be identical

параметров должны совпадать.

Incompatible types

Несовместимые типы. В

инструкции присваивания тип

выражения не соответствует или не

может быть приведен к типу

переменной, получающей значение

выражения.

Тип фактического параметра

процедуры или функции не

соответствует или не может быть

приведен к типу формального

параметра

Undeclared identifier: ‘<Имя>’

Неизвестный идентификатор,

либо оператор написан с ошибкой.

Unexpected end of file in comment

Комментарий начатый в

started on line <Номер>

указанной строке не закрыт.

Допустим, сделана опечатка и неправильно написано какое-нибудь ключевое слово. В этом случае при попытке запуска программы внизу появляется окно, в котором отображены сообщения об ошибках. При этом программа не запустится. Благодаря подсказке такую ошибку легко найти и исправить.

Частой ошибкой начинающих является пропуск конструкции begin – end в цикле. При
этом имеется в виду, что в цикле должны выполняться, например, обе команды, но на самом-то деле в цикле, конечно, будет выполняться только первая, а вторая выполнится только один раз – потом, когда программа выйдет из цикла. При попытке запуска появляется сообщение. Но это не ошибка, а предупреждение. В нем обращается внимание на то, что параметр цикла после выполнения цикла может быть неопределенным (он присутствует во второй команде).

Однако, несмотря на предупреждение, программа может запуститься. Если вводятся
дкакие-либо данные, то появляется сообщение об исключительной ситуации – exception. При этом программа приостанавливается, переходя из режима исполнения в режим отладки. Чтобы перейти к обычному редактированию кода, лучше остановить программу. Это можно сделать с помощью команды Program Reset. Затем можно поправить ошибку и вновь запустить программу.

В большие программы всегда закрадываются ошибки. Их надо быстро и квалифицированно найти и исправить.

Механизм исключительных ситуаций (exception)
одно из больших достоинств Delphi. С их помощью вы можете контролировать
возникновение ошибок и создавать в результате устойчивые к ошибкам программы.

По мере знакомства с языком и средой программист проходит несколько этапов. На
первом этапе он, по незнанию, путает типы, забывает ставить знаки препинания (например, точку с запятой в конце строки), некорректно использует операторы и т.п. В результате написанный им код в принципе невозможно исполнить. И это хорошо – 15 поскольку допущенные им ошибки оказываются автоматически выявленными на этапе компиляции, более того, часто среда программирования сама подсказывает, какая ошибка допущена, и, что важно, указывает строку, которую нужно поправить. По мере изучения языка и борьбы с синтаксическими ошибками программист плавно переходит к следующему этапу. Теперь он уже не делает таких простейших ошибок, но, поскольку сложность его программ возрастает, возрастает и вероятность совершения им ошибки, при которой программа все равно запустится. Поскольку, с точки зрения компилятора, явной ошибки нет, а некоторые странности кода, по-видимому, являются замыслом программиста. Однако компилятор все-таки сообщает об этих странностях с помощью предупреждений (Warning).

Советуем всегда обращать на них внимание, проверять при их появлении, нет ли ошибки, и вообще стараться писать код так, чтобы не было предупреждений.

Опасность таких скрытых ошибок состоит:

1) в том, что они таятся в той части кода, которую программист написал и уверен, что
она правильная (программа запустилась), а значит, и не очень внимательно будет
искать ошибку;

2) в том, что проявляется эта ошибка совсем в другом месте кода – не в том, в котором
допущена. А это приводит к долгим поискам ее по всей программе.

При возникновении исключительной ситуации можно проигнорировать ее и запустить
исполнение программы дальше, нажав F9. В этом случае программа выдает сообщение об ошибке. Необходимо найти ошибку – понять, в какой строке и почему происходит сбой. Для этого можно воспользоваться трассировкой. Для того чтобы определить первую строчку, начиная с которой будет проводиться трассировка, нужно поставить Breakpoint – точку останова.

Когда исполняемый код доходит до точки останова, исполнение программы
приостанавливается, и надо перейти в режим отладки. В режиме отладки можно исполнять последовательно программу по шагам, контролировать и изменять значения переменных и т.п. Этот режим служит для обнаружения и ликвидации ошибок. В этом случае появляется возможность просмотреть или изменить текущие значения переменных, однако изменение кода во время отладки невозможно. Измененный текст заработает только после перезапуска программы.

Чтобы выполнить текущую строку, на которой стоит курсор отладки, нажмите F7 или
F8. Строка выполнилась, и курсор сместился. Если необходимо перейти к следующей строке, то можно нажать F8, если нужно зайти в какую-либо функцию, то нажимают клавишу F7 и продолжают трассировку.

Для того чтобы в ходе отладки узнать значение той или иной переменной, нужно просто подвести к ней курсор. Появится hint со значением этой переменной. Это, однако, работает не со всеми переменными, а только с доступными в данный момент. Если нужно постоянно контролировать значение переменной, то еще проще добавить ее в список Watch.

Для более основательного слежения за значениями можете воспользоваться Списком Наблюдения (Watch List, Ctrl+F5).

Таким образом, при программировании среда Delphi может находиться в различных
режимах:

• Режим редактирования – режим, в котором редактируется код проекта,
модифицируется форма, добавляя на нее компоненты и настраивая их свойства. Это
основной режим.

• Режим исполнения программы – режим, в который среда переходит, как только
нажата клавиша F9 и был построен exe-файл. Фактически, в этом режиме происходиткак раз исполнение получившегося exe-файла проекта. Программа исполняется так,
как если бы ее вызвали не из Delphi, а просто из Windows.

• Режим отладки – в этот режим можно перейти из режима исполнения программы.

При этом программа будет приостановлена (но не остановлена совсем).

Чтобы продолжить трассировку (последовательный переход от команды к команде),
можете воспользоваться клавишами:

• F9 (Run) – продолжить программу, не трассируя ее.

• F8 (Step over) – выполняется текущая строка кода, и переходят к следующей строке.

• F7 (Trace Into) – то же, что и F8, с тем отличием, что если в текущей строчке
содержится вызов какой-либо функции или процедуры, то попадают внутрь этой
процедуры и трассируют ее до конца, затем из нее возвращаетс и переходят к
следующей строке (на которую перешли бы сразу, если бы нажали F8).

• F4 (Run to Cursor) – переход в режим исполнения программы до тех пор, пока не
должна будет выполнена строка, на которой стоит текстовый курсор (аналогично
тому, как если бы была установлена точка останова)

• Shift+F8 (Run Until Return) – процедура выполняется до конца.

• Ctrl+F2 (Program Reset) – остановка трассировки и переход в режим редактирования
кода. (Иногда целесообразнее, если это не грозит ошибками, продолжить исполнение
программы (F9) и выйти из нее нормальным образом, закрыв главную форму).

При работе в Delphi сообщение об ошибке фактически появляется дважды: сначала
выводится окно об исключительной ситуации и программа приостанавливается, а потом,
если нажать F9 (F8, F7 и т.п.), – возникает стандартное сообщение об ошибке Windows.

Итак:

1. Произошла ошибка.

2. Программа приостанавливается.

3. Выводится сообщение об exception. Это сообщение для программиста. Среда Delphi
сообщает, что программа не в состоянии выполнить какую-то свою команду.
Программист не предусмотрел возможность исключительной ситуации. Среда Delphi
приостанавливает программу, чтобы программист разобрался, где и в чем ошибка.
Отключить приостановку (2)–(3) можно, сняв флажок Menu => Tools => Debugger
Options => Language Exceptions => Stop on Delphi Exceptions.

4. Нажатие клавиши F9 (F8, F7 или др.).

5. Выводится сообщение об ошибке. Это сообщение для пользователя программы
(ситуация запуска приложения не из Delphi, а через exe-файл из Windows, т.е. не
существовует пунктов 2, 3, 4).

6. Программа продолжается (при этом она не сумела выполнить ту часть, в которой
произошла ошибка, и значит, если эта часть важная, продолжение может
сопровождаться дальнейшими ошибками).

Механизм обработки исключительных ситуаций заключается в том, что если
произошла ошибка (1) и не надо выводить (5), предпринимаются действия, чтобы (6) исполнялось корректно.

Для этого «опасная» команда (или целый блок) помещается внутрь конструкции try..except..end или try..finally..end.

Блок try..finally..end используется аналогично try..except.., но с тем отличием, что блок
команд между finally и end выполняется в любом случае, вне зависимости от того, было исключение между try и finally или нет.

Понравилась статья? Поделить с друзьями:
  • Ошибки контроллера deif
  • Ошибки коматсу 375
  • Ошибки компаний примеры
  • Ошибки контроллера carel ir33
  • Ошибки коммуникации преподавателя