работа классов в Lazarus

Вопросы программирования и использования среды Lazarus.

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

Ответить
shentsev
незнакомец
Сообщения: 4
Зарегистрирован: 08.11.2006 12:45:44
Контактная информация:

работа классов в Lazarus

Сообщение shentsev »

Пишу:

MyClass = class
mm:integer;
nn:integer;
end;

....

var MyTest:MyClass;
Begin
MyTest.mm=1; {Здесь вылетает с ошибкой Project raised exception class - External:SIGSEGV }
end;
Подскажите в чем причина.
S!V
незнакомец
Сообщения: 6
Зарегистрирован: 07.11.2006 22:31:21

Сообщение S!V »

MyTest - указатель на экземпляр класса MyClass.
Он(экземпляр) у тебя не создаётся.
Правильней было бы:

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

var
  MyTest :MyClass;
begin
  MyTest := MyClass.create;
  MyTest.mm := 1;
  MyTest.Free;
end;


И ешё, в именах типов принято ставить первую 'T' (TMyClass, например).
shentsev
незнакомец
Сообщения: 4
Зарегистрирован: 08.11.2006 12:45:44
Контактная информация:

Сообщение shentsev »

Спасибо, работает.
SergKam
постоялец
Сообщения: 251
Зарегистрирован: 16.11.2005 20:31:11
Откуда: Украина,Харьков

Сообщение SergKam »

человек видно из с++ пришел(или вообще новичек)
shentsev
незнакомец
Сообщения: 4
Зарегистрирован: 08.11.2006 12:45:44
Контактная информация:

Сообщение shentsev »

SergKam писал(а):человек видно из с++ пришел(или вообще новичек)
Я лет 5 назад как в паскале работал, но что-то такого не припомню. Необходимость вызова конструктора как и деструктора в явном виде в данном случае для меня далеко не очевидна, тем более что мной он явно не перегружается.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

shentsev писал(а):Я лет 5 назад как в паскале работал, но что-то такого не припомню. Необходимость вызова конструктора как и деструктора в явном виде в данном случае для меня далеко не очевидна, тем более что мной он явно не перегружается.


Это относится к объектам, объявленным как object - в Паскале были такие, и до сих пор поддерживаются. Если же тип объявлен как class, вызов конструктора и деструктора обязателен, т.к. именно они обеспечивают создание и удаление экземпляров класса.
Ответить