尽管我发现了一些与主题长度设置有关的帖子,但找不到解决方案:
使用下面的代码-这是一个更大的程序的一部分-
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命令,则会收到错误“不兼容的类型”。
我尝试使用for next loop-将属性分配给静态数组的每个位置(具有20个条目)或对应的动态数组,然后使用setlength。
但这没有用。是否可以将TElement2转换为数组? (因为它已经是一个数组!)
为什么不能使用简单的字符串= a的静态数组[1..20],为每个位置设置a [i] = TElement2 [i],然后使用setlength(a,5)?
如果我使用DynArraySetLength(Pointer,typeInfo,dimCnt,lengthVec),这些变量必须使用什么?
我对指针几乎一无所知,对于这样的问题我也不知道,为了从给定的TElement2数组开始的给定长度的数组,我必须使用哪些参数。顺便说一句,一般来说,使用动态数组是个好主意吗?
顺便说一句,该排序例程中也可能会出现错误,因为它无法正常工作...
谁能帮我?
最佳答案
为了在Delphi中使用动态数组,您必须声明一个这样的数组:
TElement2=array of String;
而不是
TElement2=array[20] of String
或TElement2=array[1..20] of String;
如果以这种方式声明
TElement2
,则SetLength(element1X, 3);
将起作用。此外,当您在代码底部分配时
Element2x:=e;
除非两个变量的声明类型都不相同,否则它将不会编译:
e : TElement2;
关于arrays - Delphi 10.2.3中的Setlength用于类似数组的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51498985/