【发布时间】:2018-05-25 17:52:43
【问题描述】:
我有2个类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_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 时"* - dynamic_cast 不允许这样做。你的整个问题都在这句话中。
-
可能是转录错误,但如果不是这个分号
private;对您没有任何帮助。 -
@user4581301 是的,抱歉,这是私密的:
标签: c++ casting forward-declaration dynamic-cast incomplete-type