动态数组作为delphi / pascal对象中的类型

问题描述 投票:0回答:2

我有一个单元,其中多个变量的大小必须相同。

但是我在解析文件之前不知道此数组的长度。

所以我想拥有一个动态数组,整个单元是“全局”,然后我可以

下面的代码显示了问题以及我现在拥有的解决方案。我现在的解决方案是将一个最大值指定为数组的长度。

unit xyz;
interface 

uses
abc

const
maxval=50;

type
vectorofdouble = [1...maxval] of double;  // I want to change this to dynamic array

type
  T_xyz = object

  public
    NP: integer;
  private
    var1: vectorofdouble;        
    var2: vectorofdouble;        
   public
    number: integer;       
    var3: vectorofdouble; 

  private
    procedure Create();
    function func1(etc): integer;
  public
    procedure ReadFile(const FileName, inputs: string);
  end;

implementation
procedure T_xyz.ReadFile();
////////
Read(F,np)
  //SetLength(vectorofdouble, np) // DOES NOT WORK
  for i := 0 to maxval // I DONT WANT TO LOOP UP TO MAXVAL
  begin
    var1[i] := 0
  end;

procedure T_xyz.func1(etc);
////////
do stuff
  for i := 0 to maxval // I DONT WANT TO LOOP UP TO MAXVAL
  begin
    var2[i] := 0
  end;
end;

end.
delphi pascal
2个回答
0
投票

您必须将数组而不是类型传递给SetLength。所以代替

SetLength(vectorofdouble, np)

您必须使用

SetLength(var1, np)

0
投票

您需要使用动态数组而不是固定长度数组。然后,如果您将其传递给variable而不是type,则SetLength()将起作用。

unit xyz;

interface

uses
  abc;

type
  vectorofdouble = array of double;

type
  T_xyz = object
  public
    NP: integer;
  private
    var1: vectorofdouble;
    var2: vectorofdouble;
  public
    number: integer;
    var3: vectorofdouble;
  private
    procedure Create();
    function func1(etc): integer;
  public
    procedure ReadFile(const FileName, inputs: string);
  end;

implementation

procedure T_xyz.ReadFile();
var
  i: integer;
begin
  Read(F, NP);
  SetLength(var1, NP);
  for i := 0 to NP-1 do
  begin
    var1[i] := 0;
  end;
end;

procedure T_xyz.func1(etc);
begin
  for i := Low(var2) to High(var2) do
  begin
    var2[i] := 0;
  end;
end;

end.
© www.soinside.com 2019 - 2024. All rights reserved.