2 개의 클래스 A와 B가 있습니다. B는 A에서 파생되었습니다. A에는 B의 객체 인 인수가있는 함수 포인터 멤버가 있습니다. 클래스는 다음과 같습니다. 내가 A * 또는 B *에 동적 캐스트 무효 *를하려고하면불완전한 클래스 : dynamic_cast를 통해 void *를 클래스 유형의 포인터로 변환
class B;
typedef double (*func_ptr)(B *);
class A
{
private:
func_ptr func;
};
class B: public A
{
private:
double C;
};
, 나는 다음과 같은 오류 얻을 :
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
을 내가 왜 이런 일 단서가 없다 다음과 같이 정의했다. 두 클래스 중 하나에는 가상 메소드가 없습니다. 클래스의 forward 선언은 멤버를 선언하는 데 사용할 수 없지만 여기서는 포인터를 정의하는 데 사용된다는 것을 알고 있습니다.
왜이 오류가 발생하는지 설명 할 수 있습니까?
* "동적 캐스팅 시도시 * *"- dynamic_cast에서는 허용되지 않습니다. 너의 모든 문제가 그 문장에있다. – StoryTeller
아마도 전사 오류 일지 모르겠지만이 세미콜론'private;은 별다른 호의를 보이지 않습니다. – user4581301
@ user4581301 예, 죄송합니다. 비공개입니다 : – Harshad