当我认为我提供了正确的数字时,为什么编译器会说“实际参数太多”?

时间:2010-12-07 08:43:13

标签: delphi pascal delphi-2005

我已宣布以下功能:

function next(current, next: string): Integer;
begin
    form1.Label1.Caption := next;
    form1.Label2.Caption := current;
    form1.label3.Caption := clipboard.AsText+inttostr(c);
    Result:=1;
end;

我尝试使用以下代码执行它:

if label1.Caption = '' then res := next('current', 'next');

我收到以下错误:

  

[错误] Unit1.pas(47):E2034太多了   实际参数

我认为所有参数都很好,为什么我会收到错误?

2 个答案:

答案 0 :(得分:7)

我刚刚在Delphi 7和Delphi 2010上尝试过你的代码。如果它适用于这两个,它也适用于Delphi 2005。

结论:由于代码范围/可见性,Delphi希望使用不同版本的“下一个”例程。尝试ctrl +点击“res:= next();”中的“next”并看看Delphi带你去哪儿。或者发布更多代码,以便我们可以告诉您Delphi为什么不选择“下一个”例程的版本。理想情况下,您应该发布一个整体,从“单位名称”开始到最后的“结束”。

答案 1 :(得分:7)

正如Cosmin Prund所指出的那样,问题在于可见性。

TForm有一个名为Next的程序,该程序不接受任何参数。

您的函数使用相同的名称,并且在调用TForm1类实现中的函数时,编译器将调用视为TForm1.Next,因此它给出了错误。

要解决此问题,请在函数名称之前的单位名称前面加上,即Unit1.Next()

所以这应该是你的代码

if label1.Caption = '' then res := Unit1.next('current', 'next');