Problème de Cross-Casting
Bonjour,
J'ai un petit problème de cross-casting
J'ai les classes de base suivantes :
Code:
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:
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:
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 :
Code:
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();
} |
Voilà bien-sur j'ai quelques hypothèses:
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