尽管我发现了一些与主题长度设置有关的帖子,但找不到解决问题的方法:
使用下面的代码-这是一个更大的程序的一部分-
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..20]字符串= a,为每个位置a [i] = TElement2 [i]设置并使用setlength(a,5)?>
如果我使用DynArraySetLength(Pointer,typeInfo,dimCnt,lengthVec),这些变量必须使用什么? 我对指针几乎一无所知,对于这样的问题我也不知道,从给定的TElement2数组开始,要获取给定长度的数组必须使用哪些参数。顺便说一句,一般来说,使用动态数组是个好主意吗?
顺便说一句,该排序例程中可能还会出现错误,因为它无法正常工作...
有人可以帮助我吗?
答案 0 :(得分:3)
要在Delphi中使用动态数组,必须声明一个这样的数组:
TElement2=array of String;
而不是TElement2=array[20] of String
或TElement2=array[1..20] of String;
如果您以这种方式声明TElement2
,那么SetLength(element1X, 3);
将起作用。
此外,当您在代码底部分配时
Element2x:=e;
除非两个变量的声明类型都不相同,否则不会编译:
e : TElement2;