2010-12-07 4 views
4

J'ai déclaré la fonction suivante:Pourquoi le compilateur dit-il "Trop de paramètres réels" quand je pense avoir fourni le bon numéro?

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; 

je tente de l'exécuter avec ce code:

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

Je reçois l'erreur suivante:

[Error] Unit1.pas(47): E2034 Too many actual parameters

Je pense que tous les les paramètres sont bons, alors pourquoi ai-je cette erreur?

+7

Il est juste une supposition mais je crois qu'il est le fait que les deux le nom du paramètre et le nom de la fonction est la même. Essayez d'ajouter par exemple 'A' avant le nom du paramètre. – johnny

Répondre

7

Je viens d'essayer votre code sur Delphi 7 et Delphi 2010. Si cela fonctionne sur ces deux, il devrait également fonctionner sur Delphi 2005.

Conclusion: Delphi veut utiliser une version différente de la « prochaine » routine, à cause de la portée/visibilité du code. Essayez ctrl + click-ing sur "next" dans "res: = next();" et voyez où Delphi vous emmène. Vous pouvez aussi poster plus de code afin que nous puissions vous dire pourquoi Delphi ne choisit pas votre version de la "prochaine" routine. Idéalement, vous devriez afficher une unité entière, en commençant par «nom de l'unité» jusqu'à la «fin» finale.

7

Comme spécifié par Cosmin Prund, le problème est dû à la visibilité. Le numéro

TForm a une procédure avec le nom Next qui n'accepte aucun paramètre.

Votre fonction utilise le même nom et comme vous appelez la fonction dans l'implémentation de la classe TForm1, le compilateur traite l'appel comme TForm1.Next et, par conséquent, il donnait une erreur.

Pour résoudre le problème, faites précéder le nom de l'unité avant le nom de la fonction, c'est-à-dire Unit1.Next().

Donc, cela devrait être votre code

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