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

djc*_*cis 4 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;
Run Code Online (Sandbox Code Playgroud)

我试着用这段代码执行它:

if label1.Caption = '' then res := next('current', 'next');
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

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

Cos*_*und 7

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

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


Bha*_*rat 7

正如Cosmin Prund所指出的那样,问题在于能见度.

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

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

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

所以这应该是你的代码

if label1.Caption = '' then res := Unit1.next('current', 'next');
Run Code Online (Sandbox Code Playgroud)