Setlength в Delphi 10.2.3 для типов массивов

Хотя я нашел несколько сообщений о теме setlength, я не мог найти решение для своей проблемы:

С приведенным ниже кодом - который является частью гораздо более масштабной программы -

type TVektor2=array[20] of extended;
      TElement2=array[20] of String;

Procedure Sort_Shell2(
 element1X: TElement2; zahlX: TVektor2; var Element2X : TElement2;
 var zahl2X : TVektor2);
var
  bis, i, j, k, min : LongInt;    l, laenge  : single;
  h,s,w,h1,h2, ElemX: string;
  e : array[20] of String;  
begin
laenge := 5;   // just an example 

SetLength(Element1X, 3); /// Error 
 //DynArraySetlength(e,l,1); /// how?

  bis := High(e);
  k := bis shr 1;// div 2
  while (k > 0) do
  begin
    for i := 0 to (bis - k) do
    begin
      j := i;
      h1 := e[j];     //I use this because before I had an Acces violation
      h2 := e[j + k]; // using directly e[j] := e[j+k]; 
      while (j >= 0) and (h1 > h2) do
      begin
        h := h1;
         l:=zahlx[j]; //str(l:5:3,S);showmessage(h + s);
        e[j] :=e[j + k];
        zahlx[j] := zahlx[j+ k];
        e[j + k] := h;
        zahlx[j+ k]:=l;
        if j > k then
          Dec(j, k)
        else
          j := 0;
      end; // {end while]
    end; // { end for}
    k := k shr 1; // div 2
  end;  // {end while}
   Element2x:=e;  zahl2x :=zahlx;
  end;

Я получаю ошибку «несовместимые типы», если я пытаюсь выполнить команду setlength, как это. Я попытался - с последующим циклом - привязать к каждой позиции статического массива (с 20 элементами), а также к соответствующему динамическому массиву, а затем использовать setlength. Но это не сработало. Есть ли какой - нибудь кастинг можно превратить TElement2 = массив из строки ; к массиву? (так как это уже массив!)

Почему нельзя использовать простой статический массив [1..20] из строк = a, заданный для каждой позиции a [i] = TElement2 [i] и использовать setlength (a, 5)?

Если я использую DynArraySetLength (Pointer, typeInfo, dimCnt, lengthVec), что я должен использовать для этих переменных? Я почти ничего не знаю о указателях, и я понятия не имею о такой проблеме, какие параметры я должен использовать для получения массива заданной длины, начиная с данного массива TElement2. Кстати, в общем, неплохо ли использовать динамические массивы?

Кстати, также может быть ошибка в этой процедуре сортировки, потому что она не работает хорошо ...

Может кто-нибудь мне помочь?

arrays,delphi,

1

Ответов: 1


3

Чтобы использовать динамический массив в Delphi, вам нужно объявить массив следующим образом:

TElement2=array[20] of String

а не TElement2=array[1..20] of String;илиTElement2

Если вы так заявляете TElement2, то SetLength(element1X, 3);это сработает.

более того, когда вы назначаете в нижней части кода

Element2x:=e;

он не собирается компилироваться, если обе переменные не объявлены одного типа:

e : TElement2;
Массивы, Дельфы,
Похожие вопросы