функция Eof! срочно!

Тема в разделе "Delphi - FAQ", создана пользователем blackcat, 18 май 2009.

  1. blackcat

    blackcat Гость

    компилятор выдает ошибку. пишет "Missing operator or semicolon". все точки с запятой проверила. в чем ошибка понять не могу. задача встала! помогите.

    структура данных:
    Tsequence = class
    public
    f:Tfile; //файл
    elem:Telem; //первый элемент в файле
    eof:boolean; //признак конца файла
    eor:boolean; //признак конца серии (задание на внешние сортировки)
    ...

    фрагмент кода с ошибкой:
    procedure Tsequence.ReadNext(var s:Tsequence);
    begin
    s.eof := eof(s.f); //на этой строке он выделяет ошибку!
    if not s.eof then read(s.f,s.elem);
    end;

    в чем ошибка?
     
  2. Shakmaev

    Shakmaev Гость

    а TFile существует вообще?
    откуда он берет eof?
     
  3. Titan

    Titan Well-Known Member

    Регистрация:
    10 июн 2004
    Сообщения:
    105
    Симпатии:
    0
    ошибка в том, что eof не работает с TFile.

    чтобы убедиться возьмите по нажатию на кнопку (или любое другое событие елемента формы) впишите код:

    procedure TForm1.Button1Click(Sender: TObject);
    var
    mTFile:TFile;
    begin
    eof (mTFile);
    end;

    Компилятор напишет - Incompatible types.
     
  4. blackcat

    blackcat Гость

    Tfile созданный мною тип.и eof берет он,так сказать,из себя.ошибка не в том,что eof с Tfile не работает и в приведенном примере компилятор напишет "Missing operator or semicolon". ошибка в том.что eof еще и системная функция такая есть.а компилятор ищет сначала не в системном модуле ее,а ближайшее ее опрделение.так оказалось,что это самое ближайшее-мое опрделение поля класса.именно поэтому компилятор неудоумевает.что за скобки,если поле класса их не требует. можно либо переименовать,что я делать не стала,либо обратиться напрямую к системному модулю:
    s.eof := system.eof(s.f);
     
  5. Titan

    Titan Well-Known Member

    Регистрация:
    10 июн 2004
    Сообщения:
    105
    Симпатии:
    0
    Вы , конечно, правы. :)
    Вот поэтому везде и рекомендуется не назначать своих имен, которые совпадают с системными именами
     
Загрузка...

Поделиться этой страницей