Bonjour,
J'ai un petit problème de cross-casting
J'ai les classes de base suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class A { public: A(void) : name("No name"){} virtual ~A(void) {} virtual void setName(const QString& name) { this->name = name;} virtual QString getName() const { return name;} [...] private: QString name; };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class B { public: B(void){} virtual ~B(void) {} [...] };
Et une classe C, D, E héritant à la fois de A et B
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
17
18
19
20 class C : public A, public B { public: C(void){} virtual ~C(void) {} [...] }; class D : public A, public B { public: D(void){} virtual ~D(void) {} [...] }; etc..
Dans une autre classe j'ai une QList de B*. J'y place uniquement des C*, D* et E*, par polymorphisme :
Voilà bien-sur j'ai quelques hypothèses:
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 QList<B*> liste; liste.append(new C); liste.append(new D); liste.append(new E); [...] // je récupère le premier élément : QList<B*>::const_iterator i = itemsList.constBegin(); if( i != itemsList.constEnd() ) { // et je tente un cross-casting A* select = dynamic_cast<A* >(*i); //Prochaine ligne : BOOM ! selected->getName(); }
1) je fais n'importe quoi, je n'ai pas le droit de faire ça et il y a un problème de conception latent dans mon projet (pourtant ça ressemble sacrément à ça quand même).
2) name n'est jamais initialisé. Mais pourqui pourquoi je n'en est aucune idée
3) euh c'est tout en fait
Partager