将指针指向记录分配给其他记录的指针字段时出现不兼容的类型

时间:2016-05-23 20:18:09

标签: pointers pascal incompatibility

我正在尝试在Pascal中实现一个简单的队列程序。这是代码:

type

tree = record 
      symbol: char;
      lt, rt: ^tree;
       end;

element = record
         load : ^tree;
         nxt : ^element;
         prv : ^element;
      end;

queue = record
       first : ^element;
       last  : ^element;
    end;     

procedure element_init(var e : element);
begin
   e.nxt := nil;
   e.prv := nil;
end;

procedure queue_init(var q : queue);
begin
   q.first := nil;
   q.last := nil;
end;

function queue_empty(var q :  queue): boolean;
begin
   queue_empty := q.first = nil;
end;

procedure queue_append(var q : queue; var e : element);
begin
   if queue_empty(q) then
   begin
      q.first := e;
   end
   else
   begin
      e.prv := q.last;
      q.last := e;
   end;
end;

队列是一个双向链接的元素列表,这些元素是包含指向类型tree的指针的记录。此代码的问题在于:

procedure queue_append(var q : queue; var e : element);
begin
   if queue_empty(q) then
   begin
      q.first := e;
   end
   else
   begin
      e.prv := q.last;
      q.last := e;
   end;
end;

我正在Error: Incompatible types: got "element" expected "queue.^element"

为什么呢?我已将queue定义为具有first类型的字段^element。我传递函数queue指针和element指针。然后我将元素指针分配给first的元素指针字段queue ...为什么这种机械不正确?

修改

根据评论更改了功能:

procedure queue_append(var q : queue; e : elementPtr);
begin
   if queue_empty(q) then
   begin
      q.first := e;
   end
   else
   begin
      e.prv := q.last;
      q.last := e;
   end;
end;

具有前面的定义:

elementPtr = ^element;

0 个答案:

没有答案