У меня есть 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
Я понятия не имею, почему это происходит. Ни в одном из классов нет виртуальных методов. Я знаю, что предварительное объявление класса нельзя использовать для объявления членов, но здесь оно используется для определения указателя.
Кто-нибудь может объяснить, почему я получаю эту ошибку?
private;
вам не поможет. - person user4581301   schedule 12.12.2017