LINUX.ORG.RU

lazarus, ООП, sigsegv

 


0

1

имеется код.
ООП в лазарусе пока только постигаю, поэтому кривизне не удивляйтесь.
и вот оно почему-то выдаёт Runtime Error (202) %)
в параметрах на вкладке «Генерация кода» галочки ставил/убирал - ничего нового.
сдается мне, это баг, но как обойти?

★★★
Ответ на: комментарий от batekman

Что какой? Дебаггер? Понятия не имею что там в лазарусе.
Я просто лет 20 назад писал на паскале и, думаю, смог бы помочь если бы ты ткнул меня носом ЧТО ИМЕННО приводит к краху.

Stahl ★★☆
()
Ответ на: комментарий от Stahl

если включить все проверки, то при вызове Button2Click вылазят такие невнятные ошибки, и если нажать «Приостановить», то вылазит страшное окно с ассемблером %)
если отключить — говорит SIGSEGV и показывает на строку 129.
если вырубить вызов getPowerState, то ругается на следующий метод, и т.д., пока всё не отключишь.

batekman ★★★
() автор топика
Ответ на: комментарий от batekman

TPrinter, я так понимаю, это что-то системное?
Я вижу, что ты при создании формы запускаешь дефолтный конструктор этого TPrinter.
Ты уверен, что ему не нужны никакие настройки?
Код выглядит странно — как будто ты ожидаешь, что TPrinter сам найдёт принтер и сам разберётся как им пользоваться.

Stahl ★★☆
()
Ответ на: комментарий от Stahl

это в лабе задание - создать класс «принтер».
сначала на первой кнопке ругалось, потому что там, где property ... write была функция, а не процедура.
даже интересно, теперь-то что, если не баг, конечно.

batekman ★★★
() автор топика
Ответ на: комментарий от batekman

Если включить логику то

function TPrinter.getPowerState:boolean;
begin
  result:=powerState;
end;
тут имеем зацикливание, powerState это проперти геттер которого и есть getPowerState. т.е. это эквивалентно
function TPrinter.getPowerState:boolean;
begin
  result:=getPowerState;
end;

zamtmn ★★
()
Ответ на: комментарий от zamtmn

спасибо, на мысль натолкнул. попробую ещё.

batekman ★★★
() автор топика

ООП в лазарусе пока только постигаю

Это все равно, что постигать управление самолетом в бетономешалке.

korvin_ ★★★★★
()
Ответ на: комментарий от korvin_

если стои´т цель постичь управление самолетом в бетономешалке, то что поделать.
лаба же.

batekman ★★★
() автор топика
Последнее исправление: batekman (всего исправлений: 1)
Ответ на: комментарий от zamtmn

Чем ооп в лазарусе хуже (вставить нужное)?

Тем, что нагромождение сомнительных приемов, отвлекающих от сути, при этом уступающее по фичам некоторым другим, тому же Eiffel'ю например.

korvin_ ★★★★★
()

Код в студию. А то так не угадать где у тебя ошибка.
Да. На лоре поголовно ненавидят паскаль.
Обратись http://freepascal.ru/ там тебе помогут. А то давай код. Посмотрю чёкак.

vada ★★★★★
()
Ответ на: комментарий от vada

в шапке же ссыль!
ненавидят… это лучше, чем слепо любить.

batekman ★★★
() автор топика

Код класса TPrinter совершенно нерабочий.


TPrinter=class
....
  property paperCount:integer read getPaperCount write setPaperCount;
....
  end;

....
procedure TPrinter.setPaperCount(ppr:integer);
begin
  paperCount:=ppr; <------ бесконечная рекурсия
end;

Даю пример как исправить. Поправь по аналогии другие свойства класса.


TPrinter=class
  private
  FPaperCount: Integer;  <---- смотри сюда 
....
  property paperCount:integer read getPaperCount write setPaperCount;
....
  end;

....
procedure TPrinter.setPaperCount(ppr:integer);
begin
  FPaperCount:=ppr; <--- и сюда
end;
superuser ★★★★☆
()

У тебя в классе TPrinter нет переменных chargeLevel, paperCount, power. Есть только свойства с этими именами. Кодом, что представлен, ты как Мюнхаузен пытаешься сам себя за волосья из болота вытащить. Не прокатит.

Опиши в разделе private что-то типа:
FpowerState:boolean;
FchargeLevel:integer;
FpaperCount:integer;

И в методах
getPowerState, setPowerState, getCharge, setCharge, getPaperCount, setPaperCount
обращайся только к этим именам.

И будет тебе щастье.

ЗЫ. Ну да. Тебе уже все объяснили

vada ★★★★★
()
Последнее исправление: vada (всего исправлений: 1)
Ответ на: комментарий от zamtmn

ООП в паскале вполне на уровне

На уровне наколенной поделки.

язык прост и понятен - самое то для обучения

Для обучения кого? Обучения чему? Индустрия требует кодеров на питонах, рубях и жабаскриптах, а в вузах по-прежнему старперы преподают паскаль. Особо упоротые - под ДОСом.

anonymous
()
Ответ на: комментарий от vada

бред сивой кобылы.
мне нужен метод класса TPrinter - его и беру, каким боком тут TForm1?

batekman ★★★
() автор топика
Ответ на: комментарий от Deleted

с чего бы?..
баш так и так изучать придётся - если, конечно, пейтон его не вытеснит в качестве основного шелла. так что пускай сразу учатся.

batekman ★★★
() автор топика
Ответ на: комментарий от batekman

С того, что нормальных типов данных нет, моргнёшь и уже у тебя что-то неэкранированное куда-то полезло и «вроде работает» пока -rf файл не «сработал», а уж длиннее что-то, чем на пару страниц вообще клиника.

Да и синтаксис, честно говоря, тот ещё уродец.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.