Страница 1 из 1

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

СообщениеДобавлено: 28.02.2014 21:26:10
Jordan
Добрый вечер.

Код: Выделить всё
{$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.

Идея в том, что бы список реализовать в виде класса, а не просто функций. Раньше я классы не использовал.

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

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