exited with exitcode = 202/217

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

exited with exitcode = 202/217

Сообщение fondreykus-1 » 09.07.2010 15:32:23

Здравствуйте. Решил попробовать среду FreePascal и наткнулся на ошибку при выполнении простой программы:

Код: Выделить всё
unit MyClasses;

interface

type
  TMyClass = class(TObject)
      function GetProperty():string;
      procedure SetProperty(str:string);
      property TheProperty:string read GetProperty write SetProperty;

    end;

implementation

procedure TMyClass.SetProperty(str:string);
begin
  TheProperty:=str;
end;

function TMyClass.GetProperty():string;
begin
  Result:=TheProperty;
end;

end.


И тело программы

Код: Выделить всё
program WHF;

uses
  MyClasses;

var
  MyClass:TMyClass;

begin  (* main *)
  MyClass:=TMyClass.Create;
  MyClass.TheProperty :='qwerty';
  WriteLn('Property = '+MyClass.TheProperty);
  MyClass.Free;
  ReadLn();
end.   (* main *)


Программа вылетает с кодом 202. Забавно то, что если дописать к юнитам Math, то код ошибки меняется на 217.
Если не использовать в описании класса свойство (property), а, например, оформить MyProperty как поле, а в основном теле программы явно вызывать методы GetProperty/SetProperty, то всё работает как надо.

В настройках компилятора я поставил Delphi compatible. Очень надеюсь на Вашу помощь, так как опыта у меня немного, и очень хотелось бы перейти cо среды Borland Delphi на бесплатный софт. Заранее спасибо.
fondreykus-1
незнакомец
 
Сообщения: 5
Зарегистрирован: 09.07.2010 14:07:01

Re: exited with exitcode = 202/217

Сообщение Mr.Smart » 09.07.2010 15:55:02

Значит так. Разложим по полкам.
У вас при чтении свойства TheProperty вызывается функция GetProperty, а при записи процедура SetProperty.
Загляним ка в функцию чтения
Код: Выделить всё
function TMyClass.GetProperty():string;
begin
  Result:=TheProperty;
end;

и что мы видим :shock: это же чистой воды бесконечная рекурсия и отсюда безбожное переполнение стека :shock:
данный код преобразуется в следующее:
Код: Выделить всё
function TMyClass.GetProperty():string;
begin
  Result:=GetProperty;
end;

я думаю, что не стоит смотреть процедуру запись... :mrgreen:

Добавлено спустя 2 минуты 26 секунд:
Да ещё, чуть не забыл.
...так как опыта у меня немного, и очень хотелось бы перейти cо среды Borland Delphi на бесплатный софт...

Из вашего повествования выходит, что опыт у вас есть в Делфи, а вот в Лазарусе его совсем не много! Так, я правильно понял? Но у меня закрались сомнения на счёт вашего опыта...
Я могу вам дать один совет! Читайте матчасть!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: exited with exitcode = 202/217

Сообщение fondreykus-1 » 09.07.2010 16:03:57

Спасибо большое) Теперь ясно. Буду читать матчасть)
fondreykus-1
незнакомец
 
Сообщения: 5
Зарегистрирован: 09.07.2010 14:07:01


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru