Pointers 将指向记录的指针指定给其他记录的指针字段时,类型不兼容

Pointers 将指向记录的指针指定给其他记录的指针字段时,类型不兼容,pointers,pascal,incompatibility,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;

我正在尝试用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;
队列是一个双链接的元素列表,这些元素是包含指向类型
树的指针作为加载的记录。此代码的问题在于:

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;
我正在获取
错误:不兼容类型:获取“元素”队列。^element“

为什么??我已将
队列
定义为首先有一个
字段
,该字段的类型为
^element
。我向函数传递一个
队列
指针和一个
元素
指针。然后我将元素指针分配给
队列的
的元素指针字段
first
。。。为什么这在机械上是不正确的

编辑 根据注释更改了功能:

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

Pascal是严格键入的,并且指向元素(
^element
)的指针与
var e:element
不同。您应该使代码更干净,并声明适当的指针类型(例如
typelement=^element
),并在它们所属的位置使用严格的类型。这也让你的代码更干净。好的,我明白了。我相应地修改了它,但是我该如何处理这一行
e.prv:=q.last?这仍然是一个错误,我不太明白为什么<代码>错误:非法限定符错误:非法表达式致命:语法错误,;,应为,但找到了“标识符PRV”
无需担心,我忘了取消引用,sry。Pascal是严格键入的,指向元素(
^element
)的指针与
变量e:element
不同。您应该使代码更干净,并声明适当的指针类型(例如
typelement=^element
),并在它们所属的位置使用严格的类型。这也让你的代码更干净。好的,我明白了。我相应地修改了它,但是我该如何处理这一行
e.prv:=q.last?这仍然是一个错误,我不太明白为什么<代码>错误:非法限定符错误:非法表达式致命:语法错误,应为“;”,但找到“标识符PRV”
无需终止,我忘记取消引用,sry。