dynamic_cast (int* to int *) - 编译错误
dynamic_cast (int* to int *) - compilation error
对于以下代码:
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。这是我得到的行为的简化示例(使用模板函数等),所以不要试图在此代码段中找到任何目的。
更新:
由于这段代码是模板函数的一部分,我不知道我得到的是完整的 class 还是原始的 - 这就是原因。
正如编译器错误指出的那样,您不能使用 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.”
对于以下代码:
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。这是我得到的行为的简化示例(使用模板函数等),所以不要试图在此代码段中找到任何目的。
更新: 由于这段代码是模板函数的一部分,我不知道我得到的是完整的 class 还是原始的 - 这就是原因。
正如编译器错误指出的那样,您不能使用 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 expressionv
to typeT
.T
shall be a pointer or reference to a complete class type, or “pointer to cv void.”