zwyx
Messages postés146Date d'inscriptionjeudi 22 novembre 2007StatutMembreDernière intervention21 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...
zwyx
Messages postés146Date d'inscriptionjeudi 22 novembre 2007StatutMembreDernière intervention21 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.
zwyx
Messages postés146Date d'inscriptionjeudi 22 novembre 2007StatutMembreDernière intervention21 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.
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.