Почему компилятор говорит «Слишком много фактических параметров», когда я думаю, что предоставил правильное число? - PullRequest
4 голосов
/ 07 декабря 2010

Я объявил следующую функцию:

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 ]

7 голосов
/ 07 декабря 2010

Как указано Cosmin Prund, проблема заключается в видимости.

TForm имеет процедуру с именем Next, которая не принимает никаких параметров.

Ваша функция используетТо же имя и то, что вы вызываете функцию в реализации класса TForm1, компилятор обрабатывает вызов как TForm1.Next и, следовательно, выдает ошибку.

Чтобы решить эту проблему, предшествуйте имени модуля перед именем функции, т.е., Unit1.Next().

Так что это должен быть ваш код

if label1.Caption = '' then res := Unit1.next('current', 'next');
7 голосов
/ 07 декабря 2010

Я только что попробовал ваш код на Delphi 7 и Delphi 2010. Если он работает на этих двух, он должен также работать на Delphi 2005.

Вывод: Delphi хочет использовать другую версию"рутина, из-за объема / видимости кода.Попробуйте ctrl + щелчок по «следующему» в «res: = next ();»и посмотрим, куда вас приведет Delphi.В качестве альтернативы вы можете опубликовать больше кода, чтобы мы могли сказать вам, почему Delphi не выбирает вашу версию «следующей» подпрограммы.В идеале вы должны разместить целый блок, начиная с «имени блока» и заканчивая «концом».

...