Хотя я нашел несколько сообщений о теме 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. Кстати, в общем, неплохо ли использовать динамические массивы?
Кстати, также может быть ошибка в этой процедуре сортировки, потому что она не работает хорошо ...
Может кто-нибудь мне помочь?