Pascal指针指向SyntaxError和Incompatible类型

时间:2016-12-30 16:40:31

标签: pascal

由于没有办法创建引用(是吗?)我必须使用指向另一个指针的指针。这给了我一个错误:

type
  PNode = ^TNode;
  TNode = record
    char: char;
    next: PNode;
    children: PNode;
  end;

  PPNode = ^PNode; 
var
    current_node: PPNode;  
function find_or_insert_peer(var node: PNode; character: char): PNode; 

current_node := @find_or_insert_peer(current_node^, character)^.children;

x.pas(121,23) Error: Incompatible types: got "<address of function(var PNode;Char):^TNode;Register>" expected "PPNode"
x.pas(121,43) Fatal: Syntax error, ";" expected but "(" found
Fatal: Compilation aborted

我也尝试了这个但由于SyntaxError

而无法编译
current_node := @(find_or_insert_peer(current_node^, character)^.children);

修改

请帮忙。我甚至用c ++创建了一个演示,告诉你这是合法的。 http://cpp.sh/8mxe

1 个答案:

答案 0 :(得分:0)

正如在评论中链接的诙谐文章“Addressing pointers”中所提到的,@运算符可能无法正常处理更复杂的表达式。它的等效addr()将起到作用。

current_node := addr(find_or_insert_peer(current_node^, character)^.children);