Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 返回扩展数组_Delphi_Delphi Xe - Fatal编程技术网

Delphi 返回扩展数组

Delphi 返回扩展数组,delphi,delphi-xe,Delphi,Delphi Xe,我试图返回Delphi的VCL形式的扩展数组。代码如下:- function Calc_Er( n: Integer; RadioGroup3.ItemIndex : Boolean; K1, K2 : Extended; factor1, factor2, p, hh, ten, r : Array of Real; Pa: extended ) : Array of Extended; begin if RadioGroup3.ItemIndex = 0 t

我试图返回Delphi的VCL形式的扩展数组。代码如下:-

function Calc_Er(
  n: Integer; 
  RadioGroup3.ItemIndex : Boolean; 
  K1, K2 : Extended;
  factor1, factor2, p, hh, ten, r : Array of Real; 
  Pa: extended ) : Array of Extended;
begin
    if RadioGroup3.ItemIndex = 0 then
      begin
        if hh[n] < factor1[n] then
          begin
            Er[n] := K2 * (K1 + p[n]);
          end
        else if (hh[n] < factor2[n]) and (hh[n] > factor1[n]) then
          begin
            Er_stack := K2 * (K1 + p[n]);
            Er[n] := (h / 100 + hh[n]) / ((h / 100 / Er_stack[n]) + hh[n] * (ten[n] * h / r[n] + Pa) / Sqr(p + ten[n] * h / r[n] + Pa));
          end
        else
          begin
            Er[n] := Sqr(p[n] + Pa + ten[n] * h / r[n]) / (ten[n] * h / r + Pa);
          end;
      end
    else
      begin
        Er[n] := K2 * (K1 + p[n]);
      end;
end;
函数计算器(
n:整数;
RadioGroup3.ItemIndex:布尔值;
K1,K2:扩展;
factor1,factor2,p,hh,ten,r:实数数组;
Pa:扩展):扩展的数组;
开始
如果RadioGroup3.ItemIndex=0,则
开始
如果hh[n]factor1[n]),则
开始
Er_堆栈:=K2*(K1+p[n]);
Er[n]:=(h/100+hh[n])/((h/100/Er_堆栈[n])+hh[n]*(十[n]*h/r[n]+Pa)/Sqr(p+十[n]*h/r[n]+Pa));
结束
其他的
开始
Er[n]:=Sqr(p[n]+Pa+ten[n]*h/r[n])/(ten[n]*h/r+Pa);
结束;
结束
其他的
开始
Er[n]:=K2*(K1+p[n]);
结束;
结束;

虽然我在整个代码中都使用了RadioGroup 3,但它显示了一个错误,即“未声明的标识符”或“缺少参数类型”。我不能理解这个错误。请看一看

一般来说,我了解到您永远不希望在函数的参数列表或返回类型中使用构造“array of…”

首先声明如下内容:

type
  TExtArray = array of extended;
  TRealArray = array of real;
然后用它们代替“扩展数组”和“实数组”

您还需要在动态数组上调用SetLength,包括Result


正如其他人所提到的,“RadioGroup3.ItemIndex”不能用作函数中的参数,无论其类型是否正确。只需传入一个整数值。

David的回答基本正确,但我应该指出,如果这是Delphi XE,您应该将其声明为
TArray
。这可以避免各种兼容性问题。

radiogroup 3.ItemIndex:Boolean
这不是一个正确的参数name@n0rd那该怎么办呢?因为我想使用Item Index属性。首先,检查这里:第二,决定您想让这个函数成为自由函数还是类成员。如果希望它是类成员,则可以隐式访问同一实例的所有其他类成员,而不必在函数内部传递它们;如果您不希望它是类成员,只需将其作为常规整数参数传递(类似于'ItemIndex:integer')。为什么在你的例子中它甚至是
Boolean
?@Jack:就像n0rd告诉你的那样,
Calc_Er()
没有声明为拥有
radiogroup 3
对象的表单类的成员,这就是为什么会出现错误。因此,要么使
Calc_Er()
成为表单类的成员,要么必须使用表单的全局指针来访问其成员,要么将所需的
ItemIndex
作为输入参数传递给
Calc_Er()
。如果您不知道如何做这些事情,那么您需要停止正在做的事情,重新学习Delphi基础知识。1)RadioGroup.ItemIndex不是布尔值;这是一个整数。2) 您的函数不是表单的成员,因此它不能作为参数名或在函数代码中访问
radiogroup 3
。3) 如果你没有展示你是如何申报的,我们就无法告诉你为什么它不起作用。如果您想让我们帮助您找出为什么它不起作用,您需要提供“不起作用”的特定代码。它工作得很好,但是如果尝试将函数声明为函数计算器(n:Integer;RadioGroup 3:TRadioGroup;ItemIndex:Integer;K1,K2:Extended;factor1,factor2,p,hh,ten,r:TRealArray;Pa:Extended):TExtArray;然后它抛出错误“Unsatisfied forward or external declaration:'TForm1.Calc_Er'……有什么原因吗?@Jack-读一下错误,它说,它应该是“function TForm1.Calc_Er”,而不是“function Calc_Er”。顺便问一句,当你感兴趣的只是ItemIndex值是否为零时,为什么还要坚持传递TRadioGroup对象?只需使用布尔参数并传入值“(RadioGroup3.ItemIndex=0)”。它将作为布尔值进行计算。@David如果我们在函数中传递布尔值,则会显示错误“缺少参数类型”或未声明的标识符组。也许我没有明白你说的话。@Jack-在函数中声明一个布尔参数,然后向它传递一个布尔值,这是绝对可能的。因为OP在他的例子中有几个明显的错误,这是我发布答案之前所有人都知道的。没有人注意到打字中更微妙的问题,这才是真正的问题所在。这就是我所关注的。但是,如果您使用的是支持泛型的Delphi版本,那么肯定是更好的方法。