Страница 1 из 1
функция eof! срочно!
Добавлено: 18 май 2009, 19:17
kitty_girl
компилятор выдает ошибку. пишет "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;
в чем ошибка?
Re: ф-я eof! срочно!
Добавлено: 19 май 2009, 10:55
ukolov_al
Поля и методы класса доступны ему по умолчанию, ну или, если очень нужно, через переменную Self (она неявно передается в методы класса). Таким образом ошибка здесь:
procedure Tsequence.ReadNext(var s:Tsequence);
И еще, не в тему, в исходном коде нарушено правило инкапсуляции ООП. В нутренние поля класса должны быть скрыты (поля f, elem, eof, eor надобы перенести в секцию private), значения их предоставляются через property, eof и eor нужны пользователю класса только для чтения...
Re: ф-я eof! срочно!
Добавлено: 19 май 2009, 11:01
BBB
Потому что компилятор рассматривает eof как поле данного класса типа boolean. Поэтому для него является полной неожиданностью, что далее следует открывающая скобка, против чего он и протестует.
Re: ф-я eof! срочно!
Добавлено: 19 май 2009, 14:20
kitty_girl
я уже нашла в чем ошибка.но спасибо за ответы и объяснения. насчет нарушения инкапсуляции.я знаю,что доступ к полям класса должен осуществляться через свойства,а не напрямую.однако в лабораторных заданиях нам разрешается опустить описание свойств и просто объявить все в секции public.естесственно,что в более серьезных задачах мы делаем все как нужно. насчет переименования.я не стала переименовывать поле класса,поскольку оно очень точно отражает свою суть. просто я сделала обращение к систему модулю:
s.eof:=system.eof(s.f);
Re: ф-я eof! срочно!
Добавлено: 19 май 2009, 15:10
BBB
kitty_girl писал(а):просто я сделала обращение к систему модулю:
s.eof:=system.eof(s.f);
Ну да, это допустимый синтаксис.
Re: функция eof! срочно!
Добавлено: 19 май 2009, 16:59
Игорь Акопян
" писал(а):в лабораторных заданиях нам разрешается опустить описание свойств и просто объявить все в секции public.естесственно,что в более серьезных задачах мы делаем все как нужно
не совсем верный подход... ну да офтопик это

Re: функция eof! срочно!
Добавлено: 19 май 2009, 18:23
kitty_girl
согласна,но заданий много и делать все как нужно просто не успеваешь...цель задания-показать,как ты работаешь с конкретной темой.в моем случае,это не ООП,а внешние сортировки.поэтому делаются такие допущения)