type
  myNode=record
  iIndex:integer;
  sText:string
end;procedure TForm1.proTest(var Node1:array of myNode);
var
  Node2:array of myNode
begin
  setlength(Node2,1) //没问题
  setlength(Node1,1) //有问题
end;

解决方案 »

  1.   

    当然有问题了,你这个node1就没有定义!
    是不是这个样?
    procedure TForm1.proTest(var Node1:array of myNode);
    var
      Node2:array[1..2] of myNode
    begin
      setlength(Node[2],1) 
      setlength(Node[1],1)
    end;
      

  2.   

    呵呵,不好意思,写错了
    定义数组
      Node:array[1..2] fo myNode;
      

  3.   

    to:nyf1220(我是党员)不是,我想定义一个传地址(var)的动态数组,在过程中用setlength()改变数组大小.
    请再帮我看看,谢谢!type
      myNode=record
      iIndex:integer;
      sText:string;
    end;procedure TForm1.proTest(var Node1:array of myNode);
    var
      Node2:array of myNode
    begin
      setlength(Node2,1); //没问题
      setlength(Node1,1); //有问题
    end;//调用前 P_Node已定义为全局动态数组(P_Node:array of myNode)想通过proTest
    //改变其大小、内容。
    proTest(P_Node)
      

  4.   

    你的Node1没有定义,只有Node2定义了,
    var
      Node2,Node1:array of myNode
      

  5.   

    setlength(Node2,1)后面好像没些‘;’!!!
      

  6.   

    Node1是传地址形参,不需要定义吧?
    因其实参(P_Node)是已定义,已有值的动态数组!
    我就是想通过此过程修改实参(P_Node)的大小及其值!type
      myNode=record
      iIndex:integer;
      sText:string
    end;procedure TForm1.proTest(var Node1:array of myNode);
    var
      Node2:array of myNode;
      i:integer;
    begin
      setlength(Node2,1) //没问题
      i:=high(Node1);    //没问题
      setlength(Node1,1) //有问题 为什么能访问其大小,却不能通过setlength()重设其大小呢?
    end;
      

  7.   

    我想我找到答案了,
    因为proTest(var Node1:array of myNode);函数是引用参数传递,参数是传地址的,并不压到函数的堆栈里,因此函数里处理的Nodel都是一个32位的整数,因为high()函数的参数可以是整数,不信你可以试试
     j:=0;
      i:=high(j);    
    showmessage(inttostr(i));
    但是函数setlength()就不行了,不能以一个整数作为第一个参数。
    所以连编译都不通过!
      

  8.   

    To:chw_csdn_chw(chw)
    你好,你认为怎样才能实现:
    通过过程来修改已定义且可能有值的动态数组(P_Node)的数据及大小呢?
      

  9.   

    我翻遍了手头的资料也没有类似的资料,换句话说就是,没有这样用的。你必须通过过程改动态数组吗?
    建议放在procedure外访问。
    其实,编程就是try,fail,try again ,fail,then give up 一条路不通,何必一直走下去呢?
    (仅代表个人观点),
      

  10.   

    晕~~~~~~~
    把Node2,Node1改为Node[2],Node[1]
    不行吗?不明白
      

  11.   

    你不是学计算机的吧?
    你的参数仅仅是传递数组首地址,根本不是定义动态数组,怎么能用Setlength呢?
    真是晕~~
      

  12.   

    谢谢大家的回答,本人刚学Delphi,请多指教!学习中...