Modélisation, classes imbriquées

Résolu
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016 - 11 déc. 2007 à 11:59
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016 - 16 janv. 2008 à 17:35
Certains non-dits vont sans dire.

5 réponses

zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016
11 déc. 2007 à 13:58
Désolé, seule ma signature a été envoyée, ça m'arrive souvent...
Depuis, J'AI TROUVÉ LA SOLUTION.

Pour ne pas trop pourrir le forum, je formule quand même ma question originale:

J'ai une classe TPlusieursQqc qui contient un tableau rempli d'instances de la classes TQqc.
Pour le constructeur de TPlusieursQqc, j'aimerais faire appel au constructeur de TQqc, ce qui paraît logique, et pareil pour le déstructeur.

Là où je me trompais, c'était dans l'appel au constructeur de TQqc

--------------------------------------------------------------
constructor TPlusieursQqc.Create(NbQqc: word);
var i: word;
begin
SetLength(TableauQqc, NbQqc); // TableauQqc, membre de TPlusieursQqc, array of TQqc
for i := 0 to NbQqc-1 do
TableauQqc[i].Create(); // appel au constructeur de TQqc
end;
--------------------------------------------------------------

A la place de l'avant dernière ligne, j'avait écrit:
TableauQqc[i].TQqc.Create();
C'est cette petite confusion qui provoquait l'erreur. Désolé, je débute...
3
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016
16 janv. 2008 à 17:35
J'ai finalement employé une autre technique : je passe le tableau Tableau de la classe TA en argument aux méthodes membres de TB qui en ont besoin. Comme ce tableau est déclaré dynamiquement, seule son adresse est transmise. Ainsi, l'exécution ne devrait pas en pâtir.

Cordialement,
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
12 déc. 2007 à 12:47
salut,

t'es sur que ça marche ton histoire?

cela ne serait pas plustot:

TableauQqc[i] := TQqc.Create();

a+

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016
11 janv. 2008 à 14:35
Oui, biensûr.

J'ai corrigé cette faute dès la compilation. J'ai pas encore l'habitude.

Merci de m'avoir corrigé.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zwyx Messages postés 146 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 mars 2016
11 janv. 2008 à 15:30
J'ai un souci pour modéliser deux classes dont chacune d'entre elle contient une instance (enfin son adresse uniquement) de la deuxième classe. Je m'explique par un petit schéma ascii.

 __________________
|        TA        |
+------------------+
| Tableau:         |
|   array of Word  |
| ...              |     _________________
| PremierB: TB ----+--> |       TB        |
|__________________|    +-----------------+
           /'\          | ...             |     _________________
            |           | ProchainB: TB --+--> |       TB        |
            +-----------+ MonA: TA        |    +-----------------+
            |           |_________________|    | ...             |
            |                                  | ProchainB: TB --+--> nil
            +----------------------------------+ MonA: TA        |
                                               |_________________|

Le problème est que la première classe déclarée empêche la compilation, puisqu'elle ne connait pas encore le type de la deuxième.

Vous vous demandez peut-être pourquoi j'ai besoin de faire ça ? Et bien la classe TA doit contenir la tête de la liste chaînée d'objets de classe TB. Par ailleurs, les objets de classe TB doivent connaître les valeurs du tableau Tableau de TA. Je pourrais alors simplement déclarer l'attribut Tableau de TA en public, mais avant de me résigner à cette facilité, je serais curieux de savoir si mon modèle est réalisable.

La déclaration de mes types se présente comme suit.

TB = class
private
  ...
  ProchainB: TB;
  MonA: TA; // ça ne marche pas car TA n'est pas encore déclaré
public
  ...
end;

TA = class
private
  Tableau: array of Word;
  ...
  PremierB: TB; // ça marche car TB est déclaré avant
public
  ...
end;

Si j'intervertis les déclarations de mes classes TA et TB, le problème sera le même.

Cordialement,
0
Rejoignez-nous