Pointers 将指向记录的指针指定给其他记录的指针字段时,类型不兼容
我正在尝试用Pascal实现一个简单的队列程序。代码如下: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;
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。