2012-06-08 3 views
2

Je reçois erreur lors de la diffusion dynamique du code ci-dessous.erreur dans la coulée dynamique

class CBase 
    { 
    }; 

    class CDerived: public CBase 
    { 
    }; 



    main() 
    { 

    CBase b; 
    CDerived* pd; 
    pd = dynamic_cast<CDerived*>(&b); 
    } 

Le code d'erreur est :error C2683: 'dynamic_cast' : 'CBase' is not a polymorphic type.

+0

Le message d'erreur est assez clair, qu'est-ce que vous ne comprenez pas exactement? Notez également que votre fonction principale ne possède pas le type de retour obligatoire. – PlasmaHH

+0

Dans votre cas, vous pouvez utiliser '' static_cast : 'pd = static_cast (&b);' – Mesop

+0

@PlasmaHH, whups pensais que c'était C#, mon mauvais –

Répondre

10

dynamic_cast fonctionne uniquement avec cours polymorphes.
Votre classe de base CBase doit avoir au moins une méthode virtuelle.

+3

+1:. Même si cette méthode virtuelle est juste un destructor virtuel dans le –

+0

Si votre classe de base a des méthodes virtuelles, elle devrait (probablement) également avoir un destructeur virtuel, donc simplifiez en ajoutant juste un destructeur virtuel. –