Ordre des déclarations [Résolu]

Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
- - Dernière réponse : f0xi
Messages postés
4278
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
- 21 févr. 2008 à 19:50
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 ?
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
4208
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 août 2019
32
3
Merci
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="" />

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Cirec
0
Merci
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;
Commenter la réponse de Utilisateur anonyme
0
Merci
Si tu préfères :

Procedure ConvertAToB(myA: TA; Var myB:TB);
Begin
//
End;
Commenter la réponse de Utilisateur anonyme
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
0
Merci
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.
Commenter la réponse de zwyx
0
Merci
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)
Commenter la réponse de Utilisateur anonyme
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
0
Merci
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.
Commenter la réponse de zwyx
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
24
0
Merci
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 !
Commenter la réponse de cs_Delphiprog
Messages postés
4278
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
0
Merci
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
Commenter la réponse de f0xi
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2016
0
Merci
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é.
Commenter la réponse de zwyx
Messages postés
4278
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
0
Merci
ton code doit compiler sans probleme maintenant :) hihi.

<hr size="2" width="100%" />
http://deefaze.gnomz.com
Commenter la réponse de f0xi