Ordre des déclarations [Résolu]

Signaler
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
-
Messages postés
4199
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
-
Bonjour,

Je bloque sur un point tout bête, tellement simple, que google, mon ami, me boude quand je lui demande de l'aide. Je vous explique mon problème par un bref exemple.

unit Unit1;

interface

uses
  //...

function ConvertAToB(myA: TA; myB: TB);

type
  TA: Extended; // par exemple
  TB: String; // par exemple

implementation
  //...

La déclaration de la fontion ConvertAToB bloque à la compilation car les types des arguments n'ont pas encore été déclarés. Comment puis-je m'en sortir à votre avis ?

10 réponses

Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 mai 2020
29
Salut,

tout simplement :



unit Unit1;



interface



uses

  //...



type

  TA: Extended; // par exemple
  TB: String; // par exemple





function ConvertAToB(myA: TA):TB;












implementation



  //...









 






@+
Cirec





<hr siz="" />

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TA= Extended; // par exemple
  TB= String; // par exemple
  TForm1 = class(TForm)
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function ConvertAToB(myA: TA):TB;
Begin
//
End;

Si tu préfères :

Procedure ConvertAToB(myA: TA; Var myB:TB);
Begin
//
End;
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016

Très bien. Je ne savais pas qu'on pouvait ne pas déclarer les méthodes dans la partie interface. Je vous l'avais dit que c'était une question facile !

Merci Francky23012301.

Surtout le probleme est ailleurs :

function ConvertAToB(myA: TA; myB: TB);

type
  TA: Extended; // par exemple
  TB: String; // par exemple

Ta fonction fait apelle à des types qui ne sont meme pas encore définit, car définis apres : Donc erreur de compilation (Types non connus)
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016

Bah oui, c'est bien là le sujet de ma question.

Mais je ne peux pas déclarer ma fonction après la section type qui définit TA et TB, me trompe-je ?

J'ai essayé de supprimer la déclaration de la fonction ConvertAToB dans la partie interface . Ca compile bien, sauf évidemment si je fais appel à cette fonction dans une autre unité qui use la première Unit1. 

Retour à la case départ.
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
27
Y a un léger blême :
function ConvertAToB(myA: TA; myB: TB);

En Pascal, une fonction doit TOU-JOURS renvoyer un résultat.

La réponse de Cirec est donc la plus exacte :
function ConvertAToB(myA: TA):TB;

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
<> Urgent : aidez les, svp !
Messages postés
4199
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
28
y'a DEUX problemes :

function ConvertAToB(myA: TA; myB: TB);

>> Erreur pas de retour a la fonction

type
  TA: Extended; // par exemple
  TB: String; // par exemple

>> Erreur ":" trouvé alors que "=" attendus ...

donc :

interface

type
  TA = Extended;
  TB = String;

function ConvertAToB(const A: TA): TB;
// ou
// procedure ConvertAToB(const A: TA; var B: TB);

implementation

function ConvertAToB(const A:TA): TB;
begin
  result := Format('%.2n',[A]);
end;

end.

<hr size="2" width="100%" />
http://deefaze.gnomz.com
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016

Oui, désolé, j'ai écrit faux depuis le début. Mais je pensais effectivement à
function ConvertAToB(myA: TA): TB;
Encore désolé pour le désordre que ça aura causé et merci de m'avoir corrigé.
Messages postés
4199
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
28
ton code doit compiler sans probleme maintenant :) hihi.

<hr size="2" width="100%" />
http://deefaze.gnomz.com