Ошибка — неизвестное имя
Компилятор встретил имя, о котором ничего не знает. PascalABC.NET пишет «Неизвестное имя 'x'», Free Pascal — Error: Identifier not found "x".
Как найти причину
Проверьте по порядку пять причин — от самой частой.
Переменная не описана
Каждую переменную нужно перечислить в разделе
varдоbegin:Pascal program Demo; var a: integer; begin a := 5; b := a * 2; end.Здесь
bне описана. Допишите её:a, b: integer;.Имени из сообщения не было в
var— допишите его туда, и программа соберётся.Опечатка
writline,wrteln,redlnвместоwritelnиreadln,lenghtвместоlength. Сверьте имя в сообщении с правильным написанием. Большие и маленькие буквы роли не играют, а вот пропущенная или лишняя буква — играет.Имя в сообщении написано с ошибкой — исправьте его в программе.
Русская буква вместо латинской
Русские «а», «с», «о», «р», «е», «х» выглядят так же, как латинские, но это другие символы. Переменная
cost, набранная с русской «с», для компилятора — совсем другое имя. PascalABC.NET сообщит о неизвестном имени, Free Pascal — о недопустимом символе (Illegal character). Переключите раскладку и наберите имя заново.Имя, набранное заново в латинской раскладке, компилятор узнал.
Подпрограмма описана ниже вызова
Процедуру или функцию нужно описать выше места, где её вызывают. Если главная программа вызывает
Line, а описаниеprocedure Lineстоит после неё — или вовсе послеend., — компилятор её не найдёт. Перенесите описание выше главногоbegin.То же с переменными: локальная переменная процедуры не видна в главной программе, а глобальная, описанная ниже процедуры, не видна в этой процедуре.
После переноса описания выше вызова ошибка пропала.
Не подключён модуль
Часть процедур живёт в отдельных модулях, и их подключают строкой
usesсразу после заголовка программы.Имя PascalABC.NET Free Pascal IntToStr,StrToIntбез usesuses sysutils;Sleepбез usesuses sysutils;Delay,ClrScr,GotoXYuses crt;uses crt;str,val,random,sqrtбез usesбез usesPascal program WithUses; uses sysutils; begin writeln('Число: ' + IntToStr(42)); end.Эта программа — для Free Pascal. В PascalABC.NET строку
uses sysutils;не пишите:IntToStrтам работает и так.С нужной строкой
usesимя нашлось.
Если имя точно описано
- Описание стоит внутри другой подпрограммы, а используется снаружи.
- Имя совпадает со служебным словом, и описать его не удалось:
var end: integer— ошибка уже в описании. - Возможности PascalABC.NET (
Print,for var i,Random(a, b)) в Free Pascal не работают: там это неизвестное имя или другая ошибка компиляции. Пишите на классическом Pascal, если программа должна работать в обеих средах.