Top-office11.ru

IT и мир ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Повторно объявленный идентификатор паскаль

Повторно объявленный идентификатор паскаль

‘ w /> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется .
2. Все тексты программ должны помещаться в теги [code=pas] . [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. «FAQ«, если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение — только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы — на PM!
6. Одна тема — один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме.
8. Спрашивайте и отвечайте четко и по существу.

Группа: Пользователи
Сообщений: 1
Пол: Мужской

Репутация:

Сообщение отредактировано: RabbitRabbit — 10.10.2016 17:41

Большевик–концептуал

Группа: Пользователи
Сообщений: 188
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: bu_gen@octagram.name
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: 1

Выглядит так, будто был код для Turbo Pascal с функцией Power, а потом функцию Power в сигнатуре переименовали в F, забыв поменять имя при возврате результата. В Turbo Pascal не было псевдопеременной Result, вместо этого, чтобы вернуть результат, нужно было присвоит значение псевдопеременной, имя которой совпадает с именем функции, однако в неё можно только писать, а если пытаться читать, компилятор воспринимает это как рекурсивный вызов, и если нужно читать, то создавалась ещё одна переменная, в данном случае Result, а при выходе из функции «Power := Result;» должен был передать значение этой переменной в окончательный результат.

Если совместимость с Turbo Pascal не требуется, нужно убрать строки с объявлением переменной Result и присваиванием «Power := Result;». Если требуется, то заменить Result везде на какое–то другое имя, например, ProtoResult, а в последнем присваивании тогда будет «F := ProtoResult;»

Повторно объявленный идентификатор паскаль

Вот что получается, если попытаться скомпилировать командой Ctrl+K простой модуль с синтаксическими ошибками ( правое окошко ) :

В рабочем журнале слева есть две записи о двух попытках компиляции с указанием количества ошибок, найденных компилятором каждый раз. Только вторая запись имеет отношение к текущему состоянию окошка с текстом модуля справа: каждой из 5 ошибок соответствует черный квадратик.

По завершении компиляции курсор стоит сразу после первой ошибки (вертикальная линия). В самом низу в статусной полоске слева видно сообщение компилятора о данной ошибке: «повторно объявленный идентификатор». Действительно, идентификатор x уже был описан в качестве формального параметра процедуры.

Устраняйте самую первую ошибку — и сразу компилируйте снова, нажимая Ctrl+K (см. заповеди.)

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

Скорость компиляции достаточно велика, чтобы при такой методе неудобств не возникало.

Чтобы все-таки посмотреть, что за ошибки нашел компилятор в остальных случаях, достаточно кликнуть (один раз) мышкой по любому черному квадрату: в левой части статусной полоски возникнет соответствующее сообщение. Вот пять этих сообщений для пяти ошибок, показанных на картинке ( в квадратных скобках — пояснения ) :

  1. повторно объявленный идентификатор [ Смысл этого сообщения уже обсуждался выше. ]
  2. необъявленный идентификатор [ Ключевые слова должны целиком писаться заглавными буквами; здесь явно имелось в виду INTEGER . ]
  3. пропущена » ; » [ Этот END закрывает оператор IF . Обычно после каждого оператора стоит точка с запятой, а опустить ее можно только в том случае, если дальше следует другое END . ]

идентификатор не обозначает тип записей [ Пример, когда компилятор «сбился»: в начале конструкции подразумевался идентификатор StdLog с заглавной L , обозначающий импортируемый модуль (см. оператор IMPORT в начале модуля), а вся конструкция StdLog.Real должна была обозначать вызов процедуры Real , содержащейся в этом модуле. Но компилятор воспринял конструкцию как левую часть присваивания полю Real переменной-записи Stdreal , что синтаксически выглядит так же. Поскольку Stdreal не была объявлена как запись, то и полей у нее быть не может. В подобных случаях (их в Компонентном Паскале немного) для каждого сообщения компилятора полезно было бы иметь список типичных ошибок, способных породить данное сообщение. Пока, к сожалению, такого списка не составлено. ]

  • ожидается идентификатор [ В Компонентном Паскале/Обероне после END , закрывающего тело процедуры, должно быть повторено ее имя. ]
  • После устранение первых трех ошибок (каждый раз производилась компиляция, что видно из записей в рабочем журнале), получится следующее:

    Видно, что после вставки точки запятой (ошибка 3 в первоначальном списке), компилятор точнее интерпретирует данную ошибку (зато он перестал видеть пятую ошибку из списка). Исправляя Stdlog на StdLog и компилируя, получаем:

    Компилятор снова увидел ошибку 5 из списка. Остается ее исправить (достаточно скопировать в это место имя процедуры) и нажать Ctrl+K :

    В рабочем журнале теперь нет сообщения о найденных ошибках — зато указан размер получившегося машинного кода (64 байта; второе число — 0 — относится к глобальным переменным модуля, объявляемым до всех процедур модуля; таких переменных в данном примере нет).

    Сообщения об ошибках компиляции

    1. Out of memory (не хватает памяти). Эта ошибка происходит, когда компилятору не хватает памяти. В этом случае нужно разбить модуль на два или большее количество меньших модулей.

    2. Identifier expected (ожидается идентификатор). В этой точке предполагался идентификатор. Возможно, Вы пытаетесь повторно объявить зарезервированное слово.

    3. Unknown identifier (неизвестный идентификатор). Этот идентификатор не объявлен в данном модуле.

    4. Duplicate identifier (дублируемый идентификатор). Этот идентификатор уже был использован в текущем блоке.

    5. Syntax error (синтаксическая ошибка). Ошибка с точки зрения грамматики языка.

    6. Error in real constant (ошибка в записи константы вещественного типа).

    7. Error in integer constant (ошибка в записи константы целого типа).

    8. String constant exceeds line (строковая константа выходит за пределы строки – слишком длинная). Наиболее вероятно, что Вы забыли закрывающую кавычку в строковой константе.

    11. Line too long (строка слишком длинная). Максимальная длина строки равна 126 символам.

    12. Type identifier expected (ожидается тип идентификатора). Этот идентификатор не обозначает тип, как это должно быть.

    14. Invalid file name (неправильное имя файла). Неправильное имя файла или задается несуществующий путь доступа.

    15. File not found (файл не найден).

    16. Disk full (диск полон). Удалите несколько файлов или используйте новый диск.

    18. Too many files (слишком много файлов).

    20. Variable identifier expected (ожидается идентификатор переменной). Этот идентификатор не обозначает переменную, как это должно быть.

    21. Error in type (ошибка в типе). Этот символ не может начинать определение типа.

    25. Invalid string length (неправильная длина строки). Объявленная максимальная длина строки должна быть в диапазоне 1.255.

    26. Type mismatch (несоответствие типов). Это может быть по следующим причинам:

    · несовместимые типы переменной и выражения в операторе присваивания;

    · несовместимые типы фактического и формального параметра в вызове процедуры или функции;

    · тип выражения, который несовместим с типом индекса в индексации массива;

    · несовместимые типы операндов в выражении.

    30. Integer constant expected (ожидается целая константа).

    31. Constant expected (ожидается константа).

    32. Integer or real constant expected (ожидается целая или вещественная константа).

    33. Type identifier expected (ожидается тип идентификатора). Этот идентификатор не обозначает тип указателя, как это должно быть.

    34. Invalid function result type (неправильный тип результата функции). Правильными типами результатов функций являются все простые типы, строковые типы и типы указателей.

    35. Label identifier expected (ожидается идентификатор метки). Этот идентификатор не обозначает метку, как это должно быть.

    36. Begin expected (ожидается оператор begin).

    37. End expected (ожидается оператор end).

    38. Integer expession expected (ожидается целое выражение).

    39. Ordinal expession expected (ожидается выражение порядкового типа).

    40. Boolean expression expected (ожидается выражение булевского типа).

    42. Error in expression (ошибка в выражении). Возможно, Вы забыли написать оператор между двумя операндами.

    43. Illegal assignment( неправильное присваивание ). Идентификатору функции можно присваивать значения только внутри операторной части функции.

    45. Object file too large (объектный файл слишком большой). Турбо-Паскаль не может подредактировать .OBJ файлы, размером больше 64К.

    48. Code Segment too large (сегмент кода слишком большой). Максимальный размер кода программы или модуля равен 65520 байт. Если компилируется программа, то нужно перенести несколько процедур или функций в модуль. Если компилируется модуль, то его нужно разбить на два или больше модулей.

    49. Data segment too large (сегмент данных слишком большой). Максимальный размер сегмента данных программы равен 65520 байт, включая данные, объявленные используемыми модулями.

    50. Do expеcted (ожидается ключевое слово Do).

    54. Of expected (ожидается ключевое слово Of).

    57. Then expected (ожидается ключевое слово then).

    58. Tо or Downto expected (ожидается ключевое слово to или downto).

    60. Too many procedure (слишком много процедур). Турбо-Паскаль не допускает более 512 процедур или функций в модуле.

    62. Division by zero (деление на ноль). Попытка деления на ноль.

    63. Invalid file type ( неправильный тип файла ). Этот тип файла не поддерживается процедурой обработки файлов, например, readln c типизированным файлом или Seek c текстовым файлом.

    64. Cannot Read or Write variables of type (нельзя читать или писать переменные этого типа):

    · Read или Readln могут вводить значения типа Char, Integer, Real, и String.

    · Write или Writeln могут выводить значения типа Char, Integer, Real, String и Boolean.

    66. String variable expected (ожидается строковая переменая).

    67. String expession expected (ожидается выражение строкового типа).

    69. Unit name mismatch (несоответствие имени модуля). Имя модуля, найденного в .TPU файле, не соответствует имени, заданному в предложении USES.

    71. Duplicate unit name (дублированное имя модуля).

    74. Constant and case types do not match (константа и тип переключателя в операторе case не соответствуют друг другу).

    76. Constant out of range (константа выходит за допустимый диапазон):

    · попытка индексировать массив с помощью константы, выходящей за допустимый диапазон;

    · попытка присвоить переменной константу, выходящую за допустимый диапазон;

    · попытка передать константу, выходящую за допустимый диапазон, в качестве параметра процедуры или функции.

    79. Integer or real expression expected (ожидается выражение типа integer или real).

    80. Label not within current block (метка находится вне текущего блока). Оператор goto не может ссылаться на метку, находящуюся вне текущего блока.

    81. Label already defined (метка уже определена). Эта метка уже помечает некоторый оператор.

    82. Undefined label in preceding statement part (неопределенная метка в предыдущей операторной части). Эта метка была объявлена, и на нее есть ссылка в предыдущей операторной части, но эта метка нигде не определена.

    84. UNIT expected (ожидается ключевое слово UNIT).

    85. «;» expected (ожидается ; ).

    86. «:» expected ( ожидается : ).

    87. «,» expected ( ожидается , ).

    88. «(» expected ( ожидается ( ).

    89. «)» expected ( ожидается ) ).

    90. «=» expected ( ожидается = ).

    91. «:=» expected ( ожидается := ).

    92. «[» or «(.» expected ( ожидается [ или (. ).

    93. «]» or «.)» expected ( ожидается ] или .) ).

    94. «.» expected ( ожидается . ).

    95. «..» expected ( ожидается .. ).

    97. Invalid FOR control variable (неправильная управляющая переменная в операторе for).

    98. Integer variable expected (ожидается переменная целого типа).

    100. String length mismatch (длина строки не соответствует). Длина строковой константы не соответствует количеству компонентов в символьном массиве.

    102. String constant expected (ожидается константа типа string).

    103. Integer or real variable expected (ожидается переменная типа Integer или Real).

    106. Character expession expected (ожидается выражение символьного типа).

    112. Case constant out of range (константа оператора case выходит за допустимый диапазон). Для операторов case целого типа константы должны быть внутри диапазона -32768. .32767.

    113. Error in statement ( ошибка в операторе ). С этого символа не может начинаться оператор.

    124. Statement part too large (операторная часть слишком большая).

    Турбо-Паскаль ограничивает размер операторной части около 24К. Если встречается эта ошибка, то переместите разделы операторной части в одну или более процедур. В любом случае, если программа имеет операторную часть такого размера, то имеет смысл прояснить структуру этой программы.

    132. Critical dick error (критическая ошибка диска). Критическая ошибка произошла во время компиляции (например, ошибка неготовности носителя)

    Ошибки выполнения

    Ошибки выполнения разделены на четыре категории:

    · ошибки операционной системы DOS: 1–99

    · ошибки ввода/вывода: 100-149

    · критические ошибки : 150-199

    · фатальные ошибки: 200-255.

    Последнее изменение этой страницы: 2016-09-20; Нарушение авторского права страницы

    Читать еще:  Справочник php на русском скачать
    Ссылка на основную публикацию
    Adblock
    detector