2016-09-16 45 views
0

對於下面的代碼:的dynamic_cast(INT *爲int *) - 編譯錯誤

int i = 8; 

int * p_i = &i; 
int * p_j; 

if (typeid(p_i) != typeid(p_j)) 
{ 
    p_j= dynamic_cast<int *>(p_i); 
} 

我得到以下編譯錯誤:

error: cannot dynamic_cast ‘p_i’ (of type ‘int*’) to type ‘int*’ (target is not pointer or reference to class)

我缺少什麼?

P.S.這是一個我得到的行爲的簡單例子(帶模板函數等),所以不要在這段代碼中找到任何目的。

UPD: 由於這段代碼是模板函數的一部分,我不知道我是否得到完整的類或原語 - 這是原因。

+6

['dynamic_cast'](http://en.cppreference.com/w/cpp/language/dynamic_cast)爲多態性與類。不使用像'int'這樣的本地類型的指針。如果你有兩個相同類型的變量,爲什麼首先使用一個演員? –

+0

如果'typeid'上已經有'if',爲什麼要使用'dynamic_cast'?除非您希望轉換遍歷繼承層次結構,否則不需要。 –

+1

因爲我有一個模板功能,可以有原始和polymorhyc類型 –

回答

2

由於編譯器錯誤指出,您不能使用dynamic_cast投到int*。爲此,使用reinterpret_cast

從C++ 11標準:

5.2.7 Dynamic cast [expr.dynamic.cast]

1 The result of the expression dynamic_cast<T>(v) is the result of converting the expression v to type T . T shall be a pointer or reference to a complete class type, or 「pointer to cv void.」

相關問題