class A
{
public:
int data;
virtual void method(){} //объявлена и определена
virtual ~A(){}
};
class B : public A
{
public:
virtual void method(); //объявлена, но ошибочно не определена
} b;
gcc 9.3.0
Вывод компилятора
/usr/bin/ld: test.o: in function `B::B()':
test.h:19: undefined reference to `vtable for B'
/usr/bin/ld: test.o: in function `B::~B()':
test.h:19: undefined reference to `vtable for B'
То есть, при отсутствии хотя бы одной виртуальной функции класса, компилятор «ругается» на отсутствие конструктора, деструктора, но НЕ самой отсутствующей функции