Se una funzione la dichiari e definisci nel corpo nella classe è inline per default, ma se dichiarata all'interno e definita all'esterno: no.
Se il template (o qualunque funzione definita in un header file) è incluso in più file, il preprocessore copia-incolla il corpo della funzione nelle varie unità di compilazione, il compilatore compila, ma il linker (che guarda solo la dichiarazione) non sa che la funzione è anche definita e non trovando la definizione in nessun file, da errore.
Definendo inline la funzione, in pratica dici al linker che oltre che dichiarata, la funzione è anche definita.
Questo ha un costo ovviamente: se rendi tutto inline, non fai altro che infilare lo stesso codice dappertutto e l'eseguibile ingrassa per niente.
Questo è inevitabile con i template, però il codice reale di un template viene creato al volo solo quando serve. Nel tuo esempio, se non userai mai la funzione prova della classe, il compilatore non si disturba nemmeno a prenderla in considerazione.