Глиф Учебники

Ошибка — неизвестное имя

Справочник · Pascal · 2 минуты чтения

Компилятор встретил имя, о котором ничего не знает. PascalABC.NET пишет «Неизвестное имя 'x'», Free Pascal — Error: Identifier not found "x".

Как найти причину

Проверьте по порядку пять причин — от самой частой.

  1. Переменная не описана

    Каждую переменную нужно перечислить в разделе var до begin:

    Pascal
    program Demo;
    var
      a: integer;
    begin
      a := 5;
      b := a * 2;
    end.

    Здесь b не описана. Допишите её: a, b: integer;.

    Имени из сообщения не было в var — допишите его туда, и программа соберётся.

    Не помогло — дальше: «Опечатка»

  2. Опечатка

    writline, wrteln, redln вместо writeln и readln, lenght вместо length. Сверьте имя в сообщении с правильным написанием. Большие и маленькие буквы роли не играют, а вот пропущенная или лишняя буква — играет.

    Имя в сообщении написано с ошибкой — исправьте его в программе.

    Не помогло — дальше: «Русская буква вместо латинской»

  3. Русская буква вместо латинской

    Русские «а», «с», «о», «р», «е», «х» выглядят так же, как латинские, но это другие символы. Переменная cost, набранная с русской «с», для компилятора — совсем другое имя. PascalABC.NET сообщит о неизвестном имени, Free Pascal — о недопустимом символе (Illegal character). Переключите раскладку и наберите имя заново.

    Имя, набранное заново в латинской раскладке, компилятор узнал.

    Не помогло — дальше: «Подпрограмма описана ниже вызова»

  4. Подпрограмма описана ниже вызова

    Процедуру или функцию нужно описать выше места, где её вызывают. Если главная программа вызывает Line, а описание procedure Line стоит после неё — или вовсе после end., — компилятор её не найдёт. Перенесите описание выше главного begin.

    То же с переменными: локальная переменная процедуры не видна в главной программе, а глобальная, описанная ниже процедуры, не видна в этой процедуре.

    После переноса описания выше вызова ошибка пропала.

    Не помогло — дальше: «Не подключён модуль»

  5. Не подключён модуль

    Часть процедур живёт в отдельных модулях, и их подключают строкой uses сразу после заголовка программы.

    ИмяPascalABC.NETFree Pascal
    IntToStr, StrToIntбез usesuses sysutils;
    Sleepбез usesuses sysutils;
    Delay, ClrScr, GotoXYuses crt;uses crt;
    str, val, random, sqrtбез usesбез uses
    Pascal
    program WithUses;
    uses sysutils;
    begin
      writeln('Число: ' + IntToStr(42));
    end.

    Эта программа — для Free Pascal. В PascalABC.NET строку uses sysutils; не пишите: IntToStr там работает и так.

    С нужной строкой uses имя нашлось.

Если имя точно описано