2010-08-31 202 views
9

我想施放此:投常量類的dynamic_cast

class Base 
{ 
public: 
    virtual ~Base(){}; 
}; 
class Der : public Base {}; 

int main() 
{ 
    const Base* base = new Der; 
    Der* der = dynamic_cast<Der*>(base); // Error 

    return 0; 
} 

我該怎麼辦? 我試圖把:const Der* der = dynamic_cast<Der*>(base);來支持常量,但這是行不通的。

回答

17

試試這個:

const Der* der = dynamic_cast<const Der*>(base); 

dynamic_cast不必刪除const預選賽的能力。您可以使用const_cast單獨丟棄const,但在大多數情況下這通常是一個壞主意。對於這個問題,如果你使用dynamic_cast來捕捉自己,這通常表明有一個更好的方法來做你正在做的事情。這並不總是錯誤的,但把它看作是一個警告信號,表明你正在以艱難的方式做事。

+0

我試過了不行。 – okami 2010-08-31 02:42:36

+0

您需要兩次const - 一次在被分配的變量的類型中,一次在'dynamic_cast'中。在你嘗試的例子中,你只有第一個。 – Eclipse 2010-08-31 02:48:42

+0

好的。但只是在我的問題下的一個quesiton。 爲什麼要保持虛擬〜Base(){};到dynamic_cast不會給我一個錯誤? – okami 2010-08-31 02:58:24

2
const Der* der1 = dynamic_cast<const Der*>(base); 

Der* der2 = dynamic_cast<Der*>(const_cast<Base*>(base)); 

雖然上述兩種鑄件都可以工作,但應避免使用第二種鑄件。

+0

編輯添加代碼標記。 – Puppy 2010-08-31 10:54:03