Получение "тип источника не является полиморфным" при попытке использовать динамическое приведение
struct A {};
struct B : A {};
int main()
{
A* a = new B();
B* b = dynamic_cast<B*>(a);
}
выдает:
Как я могу сделать A полиморфные? Я хочу безопасно бросить его в B.
(один из способов-добавить фиктивную виртуальную функцию, но есть ли лучший способ?)
3 ответов:
вы должны сделать
Aполиморфный, что вы можете сделать, добавивvirtualдеструктор или любая виртуальная функция:struct A { virtual ~A() = default; };или, до C++11
struct A { virtual ~A() {} };обратите внимание, что полиморфный тип должен иметь виртуальный деструктор в любом случае, если вы собираетесь безопасно вызывать delete на экземплярах производного типа через указатель на базу.
вам нужно хотя бы
virtualфункция-как правило, если другие не подходят, деструктор:struct A { virtual ~A() {} };
Comments