4

我已经声明了以下函数:

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 实际参数过多

我认为所有参数都很好,那么为什么会出现该错误?

4

2 回答 2

7

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

结论:由于代码范围/可见性,Delphi 想要使用不同版本的“下一个”例程。尝试 ctrl+click-ing 在“res := next();”中的“next” 看看德尔福带你去哪里。或者发布更多代码,以便我们可以告诉您为什么 Delphi 没有选择您的“下一个”例程版本。理想情况下,您应该发布一个完整的单元,从“单元名称”开始到最后的“结束”。

于 2010-12-07T08:58:45.370 回答
7

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

TForm有一个名称Next不接受任何参数的过程。

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

要解决此问题,请将单元名称放在函数名称之前,即Unit1.Next().

所以这应该是你的代码

if label1.Caption = '' then res := Unit1.next('current', 'next');
于 2010-12-07T10:35:58.047 回答