Вы объявляете деструктор A
как чисто виртуальный. Это все хорошо, и может считаться хорошей практикой, если вы хотите гарантировать, что класс никогда не будет создан. Однако вы все равно должны определить A::~A()
где-то в своем коде, поскольку деструктор B
автоматически вызывает A::~A()
для объекта B
. Поскольку вы объявили его чисто виртуальным, вы не можете определить его встроенным, как вы это сделали с ~B
; вы должны включить его определение вне определения класса.