IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Type Record Forward


Sujet :

Langage Delphi

  1. #1
    Teo
    Teo est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Points : 111
    Points
    111
    Par défaut Type Record Forward
    Bonjour

    Bonne année 2008 tout le monde ! (Bonne santé - des millions de lignes de codes sans bugs - plein d'argent - le tout soupoudré d'amour).

    Vla mon soucis.
    J'ai des unités, et depuis quelques temps j'evite de rendre les nouvelles
    dependentes des autres(au moins dans la partie interface),
    pour eviter les references circulaires.

    J'ai un Type_A qui est un Record dans l'unité Unt_A.
    J'ai une autre unité : Unt_B, qui declarerait un Type RECORD en Forward, dans sa partie Interface (Type_A). Utiliserai dans une fonction Type_A, en parametre.

    Puis ce serait que dans la partie implementation(de Unt_B), que je definirai
    mon Type_A de la facon suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Unit Unt_A
     
    Interface
      Type
        Type_A = Record 
          Chp1:String;
          Chp2:Integer;
        End;
      ...
    ---------------------------------------------------
    Unit Unt_B
     
    Interface
      Type
        Type_A = Record :Forward;
     
    Function MaFunction(TypA:Type_A):Boolean;
    ...
     
    Implementation
    Uses Unt_A;
     
    Type
      Type_A = A.Type_A;
      ...
    Le compilateur n'est pas d'accord, mais existe t'il une alternative, sans utiliser les pointeurs ?

    Merci d'avance pour vos pistes

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 119
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par Teo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Unit Unt_B
     
    Interface
      Type
        Type_A = Record :Forward;
     
    Function MaFunction(TypA:Type_A):Boolean;
    ...
     
    Implementation
    Uses Unt_A;
    Salut, je pense que le "uses" doit se trouver avant implementation, il doit etre en dessous de unit normalement, enfin d'après ce que j'ai déja vécu...

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    non ce n'est pas possible.

    Delphi est un compilateur une passe, qui DOIT connaitre la déclaration d'un type avant de l'utiliser

    voir mon article sur les références circulaires.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Effectivement les trois seuls "types de types" qui peuvent être déclarés forward sont : les classes, les interfaces et les pointeurs. La raison en est que, quelle que soit leur implémentation, ils sont toujours stockés sur 4 octets, et n'ont jamais besoin d'initialisation (classes et record) ou toujours besoin d'initialisation (interfaces).

    Bon en fait les pointeurs sont pas vraiment déclarés forward, du moins pas pour la partie visible du développeur, puisqu'on le déclare complètement, mais en le faisant pointer vers un type qui n'est pas encore déclaré. Mais en fait, quand on implémente un compilo Delphi, ça revient à faire une déclaration forward
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Teo
    Teo est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Points : 111
    Points
    111
    Par défaut
    Merci pour vos reponses.

    En fait vous avez confirmé mes craintes.
    Je transformerais en classe, les type Record compliqués.
    Pour le reste je vais creer une unité contenant les types les plus utilisés.
    Elle ne fera reference a aucune autre de mes unités.
    Elle pourra etre appelée par toutes les autres sans generer de references circulaires, si elle est bien pensée.

    C'est a contre coeur que je considere comme resolut.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PL/SQL] : type record et FORALL
    Par PpPool dans le forum Oracle
    Réponses: 10
    Dernier message: 18/10/2005, 19h35
  2. [PLSQL] TYPE RECORD
    Par romuald9999 dans le forum Oracle
    Réponses: 13
    Dernier message: 19/08/2004, 15h18
  3. [LG]fichier typé; record et pointeurs
    Par rigel dans le forum Langage
    Réponses: 6
    Dernier message: 12/05/2004, 16h12
  4. [LG]Resultat de fonction de type Record ?
    Par Mike888 dans le forum Langage
    Réponses: 10
    Dernier message: 24/01/2004, 22h48
  5. Structure de données de type "RECORD"
    Par chaours dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/09/2002, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo