2016-09-16 3 views
0

Für den folgenden Code:dynamic_cast (int * int *) - Übersetzungsfehler

int i = 8; 

int * p_i = &i; 
int * p_j; 

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

ich die folgende Zusammenstellung Fehler:

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

Was bin ich fehlt?

P.S. Es ist ein vereinfachtes Beispiel für ein Verhalten, das ich bekomme (mit Vorlagenfunktionen usw.). Versuchen Sie also nicht, einen Zweck in diesem Codesegment zu finden.

UPD: Da dieser Code Teil einer Template-Funktion ist, kann ich nicht wissen, ob ich eine komplette Klasse oder ein Primitiv bekomme - das ist der Grund.

+6

[ 'dynamic_cast'] (http://en.cppreference.com/w/cpp/language/dynamic_cast) ist für Polymorphismus mit Klassen. Keine Zeiger auf native Typen wie 'int' verwenden. Wenn Sie zwei Variablen des gleichen Typs haben, warum sollten Sie einen Cast verwenden? –

+0

Warum verwenden Sie 'dynamic_cast' wenn Sie bereits ein' if' auf 'typeid' haben? Sofern Sie nicht möchten, dass die Besetzung die Vererbungshierarchie durchläuft, ist sie nicht erforderlich. –

+1

Weil ich eine Template-Funktion habe, die sowohl primitive als auch polymorhyc-Typen haben kann –

Antwort

2

Da der Compiler-Fehler darauf hinweist, können Sie dynamic_cast nicht verwenden, um zu int* zu konvertieren.

Verwenden Sie reinterpret_cast dafür.

Aus dem C++ 11 Standard:

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.”

Verwandte Themen