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

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

Votre réponse

5 réponses

Meilleure réponse
zwyx 152 Messages postés jeudi 22 novembre 2007Date d'inscription 21 mars 2016 Dernière intervention - 11 déc. 2007 à 13:58
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...

Merci zwyx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 123 internautes ce mois-ci

Commenter la réponse de zwyx
Meilleure réponse
zwyx 152 Messages postés jeudi 22 novembre 2007Date d'inscription 21 mars 2016 Dernière intervention - 16 janv. 2008 à 17:35
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,

Merci zwyx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 123 internautes ce mois-ci

Commenter la réponse de zwyx
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 12 déc. 2007 à 12:47
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
zwyx 152 Messages postés jeudi 22 novembre 2007Date d'inscription 21 mars 2016 Dernière intervention - 11 janv. 2008 à 14:35
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
zwyx 152 Messages postés jeudi 22 novembre 2007Date d'inscription 21 mars 2016 Dernière intervention - 11 janv. 2008 à 15:30
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.