Se nella classe non definisci un metodo virtuale devi dichiararlo come virtuale puro
codice:
virtual void prova(void)=0;
, altrimenti il compilatore si segna che deve essere definito da qualche parte, il linker non trova la definizione e ti dà quell'errore.
Naturalmente il tentativo di richiamare un metodo virtuale su un oggetto che non implementa tale metodo risulterà in un errore (pure virtual function call) e (salvo casi eccezionali) in un crash del programma.