반응형
dynamic_cast를 사용하려고 할 때 "소스 유형이 다형성이 아닙니다."
struct A {};
struct B : A {};
int main()
{
A* a = new B();
B* b = dynamic_cast<B*>(a);
}
제공합니다 :
'a'( 'struct A *'유형)를 'struct B *'유형으로 dynamic_cast 할 수 없습니다 (소스 유형은 다형성이 아님).
A
다형성을 어떻게 만들 수 있습니까? 안전하게 B에게 캐스팅하고 싶습니다.
(한 가지 방법은 더미 가상 기능을 추가하는 것이지만 더 좋은 방법이 있습니까?)
소멸자 또는 가상 함수를 A
추가하여 수행 할 수있는 다형성 을 만들어야 virtual
합니다.
struct A {
virtual ~A() = default;
};
또는 C ++ 11 이전에
struct A {
virtual ~A() {}
};
기본에 대한 포인터를 통해 파생 된 유형의 인스턴스에 대해 안전하게 delete를 호출하려는 경우 다형성 유형에는 가상 소멸자가 있어야합니다.
적어도 하나의 virtual
함수 가 필요합니다. 일반적으로 다른 함수가 적합하지 않은 경우 소멸자는 다음을 수행합니다.
struct A {
virtual ~A() {}
};
컴파일러가 말했듯이 유형 A
은 다형성이 아닙니다. 여기에 virtual
기능을 추가해야 합니다. 예를 들어 virtual
소멸자는 좋은 선택이 될 수 있습니다.
struct A { virtual ~A() { } };
// ^^^^^^^ This makes A a polymorphic type
struct B : A {};
int main()
{
A* a = new B();
B* b = dynamic_cast<B*>(a); // Should work now
}
반응형
'developer tip' 카테고리의 다른 글
CSS 전환 자동 높이가 작동하지 않음 (0) | 2020.12.08 |
---|---|
psql을 사용하여 SSL 모드에서 postgresql에 연결 (0) | 2020.12.08 |
Bootstrap 3을 사용하는 Twitter Typeahead의 CSS 문제 (0) | 2020.12.08 |
Ajax 업로드 이미지 (0) | 2020.12.08 |
StackOverflowException이 throw 될 때 .NET이 그렇게 제대로 작동하지 않는 이유는 무엇입니까? (0) | 2020.12.08 |