Pascal:如何比较复杂的数据类型?记录比较

时间:2013-11-23 18:13:18

标签: comparison record pascal

目前,编译失败。对于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.keynde1.key以及nde1.keynde2.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.');

应用程序示例:通过键入指向另一个节点的节点(如果没有被隔离)来实现链接列表。

1 个答案:

答案 0 :(得分:2)

有两种不同类型的比较:

  • node1node2完全相同的对象?在这种情况下,请使用@运算符,它就像现代语言中的ReferenceEquals()和朋友。
  • node1node2是否包含相同的数据(如果它们是同一个对象,则无关)?在这种情况下,使用运算符重载:operator = (node1, node2: node) res: boolean; ...