type
  vItems = record
    Items      :string;       //项目名称
    Units      :string;       //单位
    Nums       :Integer;      //数量
    Price      :Currency;     //单价
    Money      :Currency;     //金额
  end;函数名称:
function OpenFrm(var sItem:array of vItems;OperatorCode:string):Boolean;调用过程:
procedure TWorkWindowForm.btn1Click(Sender: TObject);
var
   bb:array [0..7] of vItems;
begin
  OpenFrm(bb,'aa');
end;错误:
[Error] WorkWindow.pas(62): Incompatible types

解决方案 »

  1.   

    虽然都是数组 但是一个动态数组一个静态数组引起的吧你试试:
    var
      bb:Array of vItems;
    setlength(bb,8);
    OpenFrm(bb,'aa');
      

  2.   

    bb:array [0..7] of vItems;=>
    bb:array of vItems;
    setlength(bb,8);
      

  3.   

    开放数组是可以兼容动态数组、静态数组和“[]”括起来的数组项的,以下编译完全没问题,D7type
      TRec = record
      end;procedure a(var x: array of TRec);
    beginend;procedure TForm1.FormCreate(Sender: TObject);
    var
      m: array[0..7] of TRec;
    begin
      a(m);
    end;
      

  4.   


    因为开放数组可以接受 动态数组和静态数组,所以在楼主的OpenFrm例程中,不可调用SetLength。一但调用,则会出现此错误。
      

  5.   

    看清楚了- - 楼主没调用SetLength,SetLength是下面那些把类型改为了动态数组的人调用的。
      

  6.   

    他的OpenFrm代码又没贴出来,我猜那里有setLength...
      

  7.   

    function OpenFrm(var sItem:array of vItems;OperatorCode:string):Boolean;
    函数参数不能是array类型的吧?