Modélisation, classes imbriquées [Résolu]

Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Dernière intervention
21 mars 2016
- - Dernière réponse : zwyx
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Dernière intervention
21 mars 2016
- 16 janv. 2008 à 17:35
Certains non-dits vont sans dire.
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Dernière intervention
21 mars 2016
3
Merci
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...

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 zwyx
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Dernière intervention
21 mars 2016
3
Merci
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,

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 zwyx
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 juillet 2009
3
0
Merci
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.
Commenter la réponse de cs_Loda
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Dernière intervention
21 mars 2016
0
Merci
Oui, biensûr.

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

Merci de m'avoir corrigé.
Commenter la réponse de zwyx
Messages postés
152
Date d'inscription
jeudi 22 novembre 2007
Dernière intervention
21 mars 2016
0
Merci
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,
Commenter la réponse de zwyx

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.