目前,编译失败。对于node
类型的每次比较,都会显示相同的错误消息:运算符未过载:“node”=“node”。平台:免费的Pascal编译器版本2.6.0-9。
type
node = record
key : integer;
end;
var
nde1 : node;
nde2 : node;
begin
nde1.key := 1;
nde2.key := 2;
if not(nde1 = nde1) then
writeln('Wrong.');
if nde1 = nde2 then
writeln('Wrong.');
end.
是的,nde1.key
和nde1.key
以及nde1.key
和nde2.key
的比较有效。
if not(nde1.key = nde1.key) then
writeln('Wrong.');
if nde1.key = nde2.key then
writeln('Wrong.');
这种替代方法有效,但是是一种解决方法:通过@
比较内存地址。
if not(@nde1 = @nde1) then
writeln('Wrong.');
if @nde1 = @nde2 then
writeln('Wrong.');
应用程序示例:通过键入指向另一个节点的节点(如果没有被隔离)来实现链接列表。
答案 0 :(得分:2)
有两种不同类型的比较:
node1
与node2
完全相同的对象?在这种情况下,请使用@
运算符,它就像现代语言中的ReferenceEquals()
和朋友。node1
和node2
是否包含相同的数据(如果它们是同一个对象,则无关)?在这种情况下,使用运算符重载:operator = (node1, node2: node) res: boolean; ...