【问题标题】:Why does the compiler say "Too many actual parameters" when I think I've provided the correct number?当我认为我提供了正确的数字时,为什么编译器会说“实际参数太多”?
【发布时间】:2010-12-07 08:43:13
【问题描述】:

我已经声明了以下函数:

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

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

【问题讨论】:

  • 这只是一个猜测,但我相信这是参数名称和函数名称相同的事实。尝试在参数名称前添加例如“A”。

标签: delphi pascal delphi-2005


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    正如 Cosmin Prund 所说,问题在于可见性。

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

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

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

    所以这应该是你的代码

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 2016-04-24
      • 2015-08-15
      相关资源
      最近更新 更多