Tu n’instancies rien ici.
Il n’y que des déclarations.
Ta classe B a son propre objet o. Est-ce bien nécessaire ?
Pourquoi ne pas déclarer l’objet o de A comme protected et ainsi permettre aux classes dérivées d’en hériter?
Il n’a pas le droit d’y accèder ?
Tu peux dans B faire un
Object myObject = new Object();
// puis appeler le constructeur de A avec myObject.
Est-ce que A dérive de Object ?
Comme tu construits un objet A à partir d’un objet Object.
En effet je me suis perdu.
Mais ce que je ne comprends pas c’est ce que tu fais de l’objet o de la liste d’initialisation de B.
Parceque l’on est d’accord B n’a aucun accès aux membre privés de A.
Et B ne possède pas de champs membre o.
pour la classe B mon idée c’etait de creer un objet pour la passer en parametre au contructeur de A mais le probleme c’est que le constructeur de A est appelé en premier quelque soit l’ordre dans la liste d’initialisation
Mais le constructeur de la classe parent est prioritaire.
Pour la solution par contre je suis paumé. Désolé.
Je ne connais pas d’exmple de ce genre.
As tu pênsé à revoir ta conception. Peut-être y a-t’il une autre méthode.
ok merci pour l’info je pensais que c’etait l’ordre dans la liste qui comptait
c’est bizarre je fait ça dans toute mes classes et j’a juste des warning (pas de probleme a l’execution)
va falloir que je regarde ça attentivement et que je me calme a faire des listes d’init partout :).
bon bah j’ai l’impression que ce que je veux faire est pas possible.
Tant pis je vais devoir me trimballer des constructeur a trouze mille arguments
On est d’accord.
Mais il ne veut pas utiliser de paramètre dans le constructeur de B.
Alors du coup je vois pas comment il s’en tire.
Je pense qu’il y a un problème de conception.
B est une spécialisation de A, mais A contient une référence à un objet de B. Pourquoi la classe parent ne contiendrait pas l’objet et la classe fille un accès ?
Maintenant comme je ne sais pas à quoi servent les classes. c’est peut-être totalement hors sujet.
class A
{
public:
A() // constructeur par defaut
{
...
}
void setO(myObject& o) { m_o=o; }
myObject& m_o;
};
class B : public A
{
public:
B(...):A()
{
...
A::setO(m_ob);
}
myObject m_ob;
};
B instanceDeB(...);
ça te va pas la solution avec un constructeur par defaut et une initialisation a posteriori ??? a moins que o soit vital pour la l’initialisation de l objet A…
mais si ça peut attendre quelques lignes
tu instancie B qui a un membre m_ob de la class myObject
et ensuite tu passe cet object a A pour qu’il le colle en reference…
On est obligé d’initialiser une reference des sa declaration. Ma classe A est mal foutue en fait. La seule solution serait donc de passer par des pointeurs et de tout modifier, mais ya toute une librairie derriere alors je vais devoir la laisser comme ça.