Ошибка 216 при создании класса.

Общие вопросы программирования, алгоритмы и т.п.

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

Ошибка 216 при создании класса.

Сообщение Jordan » 28.02.2014 21:26:10

Добрый вечер.

Код: Выделить всё
{$mode objfpc}

unit SCL;

interface

TYPE
  TList = Class
  type
    PList = ^AList;
    AList = record
    Next : PList;
    Data : POINTER;
  end;
var
  First: PList;
  Last : PList;
 
  PROCEDURE Init();
  PROCEDURE PushFront(v: POINTER);
END;

implementation

PROCEDURE TList.PushFront(v: POINTER);
var
  p: PList;
BEGIN
  New(P);
  P^.Data := V;
  P^.Next := First;
  First := P;
END;

PROCEDURE TList.Init();
BEGIN
First := NIL;
END;


BEGIN
END.



main
Код: Выделить всё
{$mode objfpc}

PROGRAM main;

USES
  SCL;
 
 
TYPE
  PRect = ^TRect;
  TRect = RECORD
    X, Y, W, H: INTEGER;
  END;

VAR
  L: SCL.TList;
  M: PRect;

BEGIN
  New(M);
  M^.X := 5;
  //L.Create;
  L.Init;
  L.PushFront(M);
END.


При вызове PushFront(M); выдаёт ошибку 216.

Идея в том, что бы список реализовать в виде класса, а не просто функций. Раньше я классы не использовал.
Jordan
новенький
 
Сообщения: 13
Зарегистрирован: 19.12.2013 09:44:54

Re: Ошибка 216 при создании класса.

Сообщение Дож » 28.02.2014 23:14:36

Классы — это указатели, память под них нужно явно выделять и освобождать (при помощи конструкторов и деструкторов соответственно).
Код: Выделить всё
  ...
  New(M);
  M^.X := 5;
  L := SCL.TList.Create;
  L.Init;
  L.PushFront(M);
  L.Free;
  ...
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47


Вернуться в Общее

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

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

Рейтинг@Mail.ru