2012-06-08 4 views
2

Я получаю ошибку при динамическом нажатии нижеприведенного кода.Ошибка при динамическом литье

class CBase 
    { 
    }; 

    class CDerived: public CBase 
    { 
    }; 



    main() 
    { 

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

Код ошибки :error C2683: 'dynamic_cast' : 'CBase' is not a polymorphic type.

+0

Сообщение об ошибке довольно ясно, что именно вы не понимаете в нем? также обратите внимание, что в вашей основной функции отсутствует обязательный тип возврата int. – PlasmaHH

+0

В вашем случае вы можете использовать '' static_cast : 'П.Д. = static_cast (&b);' – Mesop

+0

@PlasmaHH, whups подумал, что это C#, мой плохой –

ответ

10

dynamic_cast работает только с полиморфных классов.
Ваш базовый класс CBase должен иметь как минимум один виртуальный метод.

+3

+1:. Даже если этот виртуальный метод только виртуальный деструктор в базовый класс. –

+0

Если ваш базовый класс имеет виртуальные методы, он должен (вероятно) также иметь виртуальный деструктор. Поэтому упростите, добавив только виртуальный деструктор. –

Смежные вопросы