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');

次のエラーが表示されます。

[Error] Unit1.pas(47): E2034 実パラメータが多すぎます

すべてのパラメータは適切だと思うのに、なぜそのエラーが発生するのですか?

4

2 に答える 2

7

Cosmin Prund が指定したように、問題は可視性が原因です。

TFormNextパラメータを受け入れない名前のプロシージャがあります。

関数は同じ名前を使用しており、TForm1 クラスの実装で関数を呼び出しているため、コンパイラは呼び出しを処理しているTForm1.Nextため、エラーが発生していました。

この問題を解決するには、ユニット名を関数名の前に置きUnit1.Next()ます。

したがって、これはあなたのコードでなければなりません

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

Delphi 7 と Delphi 2010 の両方であなたのコードを試してみました。これらの 2 つで動作する場合は、Delphi 2005 でも動作するはずです。

結論: Delphi は、コード スコープ/可視性のために、別のバージョンの「next」ルーチンを使用したいと考えています。"res := next();" の "next" を ctrl+クリックしてみてください。Delphi がどこに連れて行ってくれるか見てみましょう。または、Delphi が「次の」ルーチンのバージョンを選択しない理由を説明できるように、さらにコードを投稿してください。理想的には、「ユニット名」から最後の「終わり」まで、ユニット全体を投稿する必要があります。

于 2010-12-07T08:58:45.370 に答える