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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
kitty_girl
Сообщения: 8
Зарегистрирован: 04 май 2009, 19:38

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

в чем ошибка?
ukolov_al
Сообщения: 2
Зарегистрирован: 18 май 2009, 17:53

Поля и методы класса доступны ему по умолчанию, ну или, если очень нужно, через переменную Self (она неявно передается в методы класса). Таким образом ошибка здесь:
procedure Tsequence.ReadNext(var s:Tsequence);
И еще, не в тему, в исходном коде нарушено правило инкапсуляции ООП. В нутренние поля класса должны быть скрыты (поля f, elem, eof, eor надобы перенести в секцию private), значения их предоставляются через property, eof и eor нужны пользователю класса только для чтения...
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

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

я уже нашла в чем ошибка.но спасибо за ответы и объяснения. насчет нарушения инкапсуляции.я знаю,что доступ к полям класса должен осуществляться через свойства,а не напрямую.однако в лабораторных заданиях нам разрешается опустить описание свойств и просто объявить все в секции public.естесственно,что в более серьезных задачах мы делаем все как нужно. насчет переименования.я не стала переименовывать поле класса,поскольку оно очень точно отражает свою суть. просто я сделала обращение к систему модулю:
s.eof:=system.eof(s.f);
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

kitty_girl писал(а):просто я сделала обращение к систему модулю:
s.eof:=system.eof(s.f);
Ну да, это допустимый синтаксис.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

&quot писал(а):в лабораторных заданиях нам разрешается опустить описание свойств и просто объявить все в секции public.естесственно,что в более серьезных задачах мы делаем все как нужно
не совсем верный подход... ну да офтопик это :)
Изображение
kitty_girl
Сообщения: 8
Зарегистрирован: 04 май 2009, 19:38

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