73 votes

C++ converti en classe dérivée

Comment puis-je caster vers une classe dérivée? Les approches ci-dessous donnent toutes l'erreur suivante :

Impossible de convertir de BaseType en DerivedType. Aucun constructeur ne pouvait prendre le type de source ou la résolution de surcharge du constructeur était ambigu.

 BaseType m_baseType;

DerivedType m_derivedType = m_baseType; // gives same error

DerivedType m_derivedType = (DerivedType)m_baseType; // gives same error

DerivedType * m_derivedType = (DerivedType*) & m_baseType; // gives same error

12voto

Michael Kohne Points 8233

Vous ne pouvez pas convertir un objet de base en un type dérivé - il n'est pas de ce type.

Si vous avez un pointeur de type de base vers un objet dérivé, vous pouvez convertir ce pointeur en utilisant dynamic_cast. Par exemple:

 DerivedType D;
BaseType B;

BaseType *B_ptr=&B
BaseType *D_ptr=&D;// get a base pointer to derived type

DerivedType *derived_ptr1=dynamic_cast<DerivedType*>(D_ptr);// works fine
DerivedType *derived_ptr2=dynamic_cast<DerivedType*>(B_ptr);// returns NULL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X