• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

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;

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

Shakmaev

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

Titan

ошибка в том, что eof не работает с TFile.

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

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

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

blackcat

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

Titan

Вы , конечно, правы. :)
Вот поэтому везде и рекомендуется не назначать своих имен, которые совпадают с системными именами
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!