以下代码:
int i = 8;
int * p_i = &i;
int * p_j;
if (typeid(p_i) != typeid(p_j))
{
p_j= dynamic_cast<int *>(p_i);
}
我收到以下编译错误:
错误:不能dynamic_cast'p_i'(类型'int *')来键入'int *'(目标不是指针或对类的引用)
我错过了什么?
P.S。这是我获得的行为的简化示例(使用模板函数等),因此不要试图在此代码段中找到任何目的。
UPD: 由于此代码是模板函数的一部分,我无法知道我是否获得了完整的类或原语 - 这就是原因。
答案 0 :(得分:2)
由于编译器错误指出,您无法使用dynamic_cast
转换为int*
。
使用reinterpret_cast
。
来自C ++ 11标准:
5.2.7动态广告 [expr.dynamic.cast]
1表达式
dynamic_cast<T>(v)
的结果是将表达式v
转换为类型T
的结果。T
应该是对完整类类型的指针或引用,或者是指向 cv void的指针。“