No se C++, pero por lo que acabo de leer getline espera de primer argumento el objeto archivo, en tu caso f, y de segundo argumento la variable que va a contener la cadena.
Después, por como está configurado el archivo de subtítulos deberás guardar en la variable subtítulo o descartar tanto el número de subtítulo, que podrías usar para hacer un array con todos los subtítulos del archivo, y los tiempos de visualización, que los necesitarás para mostrar en pantalla. Una vez conseguidos o descartados estos dos datos es cuándo vienen las tres líneas que deseas guardar.
Ahora ya podemos ver que tu función leerSubtitulo no puede funcionar, tal y como está construida.
Veo que te han dado el prototipo de la función
void leerSubtitulo(char NombreFichero[], Subtitulo S[])
Subtitulo S[] te indica que recibes un array de subtítulos y debes rellenarlo en la función. ¿Cómo?
Utiliza el índice de subtítulo proporcionado por el archivo, conviértelo en número y réstale 1. Este será tu índice para guardar el dato en el array.
Después viene tu base de tiempos. Si no la vas a utilizar la lees pero no la guardas en ningún sitio, así el contador del fichero se moverá hasta la primera línea de texto.
Ahora lees las líneas de texto, hasta tres o hasta que obtengas una línea vacía. Para cada línea, menos la vacía, vas guardando en cada línea de tu variable de Subtítulo la línea leía.
Si y solo si has leído del fichero tres líneas con texto debes seguir leyendo y, esta vez, descartando líneas de texto del archivo hasta que encuentres una línea vacía.
Repite hasta llegar al final del fichero.
No se C++ y ahora no me pondré a mirar la biblioteca estándar del lenguaje, así que dejo la codificación para ti. Ya nos dirás como te ha ido.