2012-06-08 60 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 ':'PD =的static_cast (&b);' – Mesop

+0

@PlasmaHH,whups認爲這是C#,是我不好 –

回答

10

dynamic_cast只有態類工作。
您的基類CBase應該有至少有一個虛擬方法

+3

+1:即使虛擬方法只是在一個虛擬的析構函數基類。 –

+0

如果你的基類有虛擬方法,它應該(可能)也有一個虛擬析構函數,所以通過添加一個虛擬析構函數來簡化。 –