Bonjour à tous,


Je maîtrise un peu mal les héritages virtuels. J'ai une classe de base :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
class CMaBase
{
public:
    void Add(const std::string& rstrCode);
private:
    std::vector<std::string> m_vecCodes;
}
Puis deux classes héritant de cette classe de base :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
class CMaSubClass1 : virtual public CMaBase
{
public :
    CMaSubClass1() {
    Add("Code 1 de CMaSubClass1");
    Add("Code 2 de CMaSubClass1"); }
}
 
class CMaSubClass2 : virtual public CMaBase
{
public :
    CMaSubClass1() {
    Add("Code 1 de CMaSubClass2");
    Add("Code 2 de CMaSubClass2"); }
}
Et enfin une classe finale
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
class CMaClassFinale : public CMaSubClass1, CMaSubClass2
{
   // J'aimerai que m_vecCodes ici contiennt les codes 1 et 2 des subclass 1 et 2, soit 4 codes
}

En fait ça fonctionne mais à un moment dans mon code j'airai besoin de downcaster un CMaBase* en une de ses classe fille, et j'obtient une erreur :

error C2635: impossible de convertir un(e) 'CMaBase*' en un(e) 'CMaSubClass1*'; conversion à partir d'une classe de base virtuelle implicite

L'objectif étant qu'il y ai un membre au niveau de la classe de base que les différentes classes héritées remplissent, et faire une classe les réunissant via l'héritage multiple pour avoir une liste complète.


Est-ce possible de faire ça ?


Merci beaucoup,

A bientôt