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

  • Автор темы blackcat
  • Дата начала
B

blackcat

Гость
#1
компилятор выдает ошибку. пишет "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;

в чем ошибка?
 
S

Shakmaev

Гость
#2
а TFile существует вообще?
откуда он берет eof?
 

Titan

Well-Known Member
10.06.2004
105
0
#3
ошибка в том, что eof не работает с TFile.

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

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

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

blackcat

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

Titan

Well-Known Member
10.06.2004
105
0
#5
Вы , конечно, правы. :)
Вот поэтому везде и рекомендуется не назначать своих имен, которые совпадают с системными именами