2010-08-05 102 views
3

無論何時我嘗試運行此代碼,此代碼都會返回一個錯誤。有人可以幫幫我嗎。動態鑄造問題

struct m 
{ 
    virtual int s() 
    { 
     return 1; 
    } 
}; 

struct n : public m 
{ 
    int s() 
    { 
     return 2; 
    } 
}; 

int o() 
{ 
    n* p=new m; 
    m* q=dynamic_cast<p>; 
    return q->s(); 
} 
+2

你應該發佈你在運行代碼時得到的錯誤。 – 2010-08-05 17:49:45

+0

如果您想成爲下一個卡拉什尼科夫分解員工受害者nr 1,請編寫此代碼。 爲什麼地球上您需要dynamic_cast? – jpinto3912 2010-08-05 17:54:48

+0

您當然不需要'dynamic_cast'來調用虛函數。這是虛擬功能的重點。並且在取消引用指針之前總是檢查轉換是否成功。 – 2010-08-05 18:14:40

回答

7

這些C++投運營商應作爲

dynamic_cast<newType>(variable) 

在你的情況,

m* q = dynamic_cast<m*>(p); 

BTW,你混亂的mn的作用? n* p = new m是語法錯誤,因爲基類實例不能隱式轉換爲派生類實例。實際上,基地→派生的你實際需要dynamic_cast的情況,而不是相反(不需要施法)。

此外,請考慮給對象賦予有意義的名稱。

2

下次請告訴我們錯誤是什麼!

我想你是說有一個編譯錯誤,因爲你沒有使用dynamic_cast權利?你可能是想說

m* q=dynamic_cast<m *>(p); 

一般來說,dynamic_cast是魔鬼。大多數實現非常慢,可能會進行基於字符串的類名檢查。除非你確實需要使用dynamic_cast,否則請使用其他可用的方法(如static_cast)。

+0

http://www.boost.org/doc/libs/1_43_0/libs/conversion/cast.htm是兩個陣容中最好的.. – smerlin 2010-08-05 17:55:04

0

兩個問題,首先你不能在m的第一行中分配m並將其稱爲n。你在dynamic_cast中有一個合成錯誤。它是dynamic_cast<new type>(some var)