C++ 不完整类:通过动态_转换将void*转换为指向类类型的指针
我有两个类A和B。B是从A派生的。A有一个函数指针成员,其参数是B的对象。这些类的定义如下:C++ 不完整类:通过动态_转换将void*转换为指向类类型的指针,c++,casting,forward-declaration,dynamic-cast,incomplete-type,C++,Casting,Forward Declaration,Dynamic Cast,Incomplete Type,我有两个类A和B。B是从A派生的。A有一个函数指针成员,其参数是B的对象。这些类的定义如下: class B; typedef double (*func_ptr)(B *); class A { private: func_ptr func; }; class B: public A { private: double C; }; 当我尝试将void*动态强制转换为a*或B*时,会出现以下错误: void *v_ptr; A *a_ptr = dynamic_ca
class B;
typedef double (*func_ptr)(B *);
class A
{
private:
func_ptr func;
};
class B: public A
{
private:
double C;
};
当我尝试将void*动态强制转换为a*或B*时,会出现以下错误:
void *v_ptr;
A *a_ptr = dynamic_cast<A*>(v_ptr);
B *b_ptr = dynamic_cast<B*>(v_ptr);
error: the operand of a pointer dynamic_cast must be a pointer to a complete class type
void*v_ptr;
A*A_ptr=动态演播(v_ptr);
B*B_ptr=动态_cast(v_ptr);
错误:指针动态转换的操作数必须是指向完整类类型的指针
我不知道为什么会这样。这两个类中都没有虚拟方法。我知道类的前向声明不能用于声明成员,但在这里它被用来定义指针
有人能解释我为什么会出现这个错误吗?您不能通过转换
void*
,动态转换所需的表达式必须引用完整的类类型,而void
则不能
(强调矿山)
完整类类型的左值如果新类型
是引用,则指向完整类类型的指针的PR值如果新类型
是指针
顺便说一句:转换类型也应该引用完整的类类型
指向完整类类型的指针、指向完整类类型的引用或指向(可选cv限定)void的指针
dynamic\u cast
的操作数必须是指向完整类类型()的指针:
动态(v)
的结果是将表达式v转换为类型T的结果此外,还不清楚为什么要使用
dynamic\u cast
。示例中的类不是多态的。没有虚拟函数可见。“当我尝试动态强制转换一个void时”*-这是动态强制转换不允许的。你的全部问题都在那句话里。可能是抄写错误,但如果不是这个分号的话,private代码>没有帮你任何忙。@user4581301是的,对不起,这是私人的:谢谢。我现在明白了。我应该用静电感应,谢谢。我现在明白了。我应该使用静态投影