компилятор выдает ошибку. пишет "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;
в чем ошибка?
функция eof! срочно!
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Поля и методы класса доступны ему по умолчанию, ну или, если очень нужно, через переменную Self (она неявно передается в методы класса). Таким образом ошибка здесь:
procedure Tsequence.ReadNext(var s:Tsequence);
И еще, не в тему, в исходном коде нарушено правило инкапсуляции ООП. В нутренние поля класса должны быть скрыты (поля f, elem, eof, eor надобы перенести в секцию private), значения их предоставляются через property, eof и eor нужны пользователю класса только для чтения...
procedure Tsequence.ReadNext(var s:Tsequence);
И еще, не в тему, в исходном коде нарушено правило инкапсуляции ООП. В нутренние поля класса должны быть скрыты (поля f, elem, eof, eor надобы перенести в секцию private), значения их предоставляются через property, eof и eor нужны пользователю класса только для чтения...
Потому что компилятор рассматривает eof как поле данного класса типа boolean. Поэтому для него является полной неожиданностью, что далее следует открывающая скобка, против чего он и протестует.
-
- Сообщения: 8
- Зарегистрирован: 04 май 2009, 19:38
я уже нашла в чем ошибка.но спасибо за ответы и объяснения. насчет нарушения инкапсуляции.я знаю,что доступ к полям класса должен осуществляться через свойства,а не напрямую.однако в лабораторных заданиях нам разрешается опустить описание свойств и просто объявить все в секции public.естесственно,что в более серьезных задачах мы делаем все как нужно. насчет переименования.я не стала переименовывать поле класса,поскольку оно очень точно отражает свою суть. просто я сделала обращение к систему модулю:
s.eof:=system.eof(s.f);
s.eof:=system.eof(s.f);
Ну да, это допустимый синтаксис.kitty_girl писал(а):просто я сделала обращение к систему модулю:
s.eof:=system.eof(s.f);
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
не совсем верный подход... ну да офтопик это" писал(а):в лабораторных заданиях нам разрешается опустить описание свойств и просто объявить все в секции public.естесственно,что в более серьезных задачах мы делаем все как нужно


-
- Сообщения: 8
- Зарегистрирован: 04 май 2009, 19:38
согласна,но заданий много и делать все как нужно просто не успеваешь...цель задания-показать,как ты работаешь с конкретной темой.в моем случае,это не ООП,а внешние сортировки.поэтому делаются такие допущения)