GAECHKA
Твоя помощница в решении задач

Односвязный список на указателях

Всем привет.
Создаю односвязный список на указателях, но в процессе где-то допустил ошибку:
unit1.pas(43.9) Error:illigal expression
unit1.pas(43.9) Fatal Syntax error ";" expected but "identified DATA" found
Хелп,плз
unit Unit2;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils;
 
type
 TData= TPoint;
 PNode=^TNode;
 TNode= record
 data: TData;
 next: PNode;
  end;
 TLst= PNode;
 TPosition= PNode;
 
var FirstEinList, LastEinList: TPosition;
 L: TLst;
implementation
 
end.
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus,Unit2;
 
type
  { TForm1 }
 
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    procedure MenuItem2Click(Sender: TObject);
    procedure MenuItem3Click(Sender: TObject);
  private
 
  public
 
  end;
 
 
var
  Form1: TForm1;
  Point1, Point2, Point3: PNode;
  Point: TData;
  R: integer;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.MenuItem2Click(Sender: TObject);
begin
 
  New(Point1); 
 Point1.data.X:=100;
 Point1.data.Y:=100;
 New(Point2);
 Point2.data.X:=200;
 Point2.data.Y:=100;
 New(Point3);
 Point3.data.X:=200;
 Point3.data.Y:=200;
 // Собственно создание списка
 Point1^.next:=Point2;
 Point2^.next:=Point3;
 New(FirstEinList); // Создадим заголовок (метка начала списка)
 FirstEinList:=Point1;
 New(LastEinList); // Создадим метку конца списка
 LastEinList^.next:=nil; // Конец списка
 Point3^.next:= LastEinList;
 L:=Point1; // Адрес начала списка
 // (хотя им можно и не пользоваться)
 
 R:=4;
 Point:=Point1.data;
 Canvas.Ellipse(Point.x-R,Point.y-R, Point.x+R, Point.y+R);
 Point:=Point2.data;
 Canvas.Ellipse(Point.x-R,Point.y-R, Point.x+R, Point.y+R);
 Point:=Point3.data;
 Canvas.Ellipse(Point.x-R,Point.y-R, Point.x+R, Point.y+R);
end;
 
procedure TForm1.MenuItem3Click(Sender: TObject);
var q: PNode;
begin
 q:=FirstEinList; //q:=L;
 while q  LastEinList do
 begin
 Point:=q.data;
 Canvas.MoveTo(Point.x, Point.y);
 q:=q^.next;
 if q LastEinList then
 begin
 Point:=q.data;
 Canvas.LineTo(Point.x, Point.y);
 end;
 end;
end;
 
end.
0
вопрос задан

Источник


3 ответа
Решение
Ну у тебя же в 52-ой строке написано правильно, с разыменованием указателя. Так и пиши везде:
 New(Point1); 
 Point1^.data.X:=100;
 Point1^.data.Y:=100;
, и так далее...
Спасибо, разобрался в ошибке
TStack есть в стандартной библиотеке. зачем заниматься онанизмом?