Почему компилятор говорит «Слишком много фактических параметров», хотя я думаю, что указал правильный номер?

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

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 Слишком много фактических параметров

Я думаю, что все параметры в порядке, так почему же я получаю эту ошибку?


person djcis    schedule 07.12.2010    source источник
comment
Это всего лишь предположение, но я считаю, что это тот факт, что имя параметра и имя функции совпадают. Попробуйте добавить, например, «A» перед именем параметра.   -  person johnny    schedule 07.12.2010


Ответы (2)


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

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

person Cosmin Prund    schedule 07.12.2010

Как уточнил Космин Прунд, проблема в видимости.

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

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

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

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

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