簡體   English   中英

動態數組作為 delphi/pascal 對象中的類型

[英]dynamic array as type in delphi/pascal object

我有一個單元,其中有多個變量必須是相同大小的向量。

但是在解析文件之前我不知道這個數組的長度。

所以我想要一個動態數組,它是整個單元的“全局”,然后我可以

下面的代碼顯示了這個問題以及我現在的解決方案。 我現在的解決方案是指定一個最大值作為數組的長度。

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.

您想使用動態數組而不是固定長度的數組 你這樣做

array of <Type>

代替

array[<Low>..<High>] of <Type>

然后SetLength()將起作用,但是您需要將動態數組變量而不是type傳遞給它。

嘗試這個:

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.

您必須將數組傳遞給SetLength而不是類型。 所以代替

SetLength(vectorofdouble, np)

你必須使用

SetLength(var1, np)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM