No es posible usar un vector con posiciones vacias, por convención es necesario inicializar elementos con valores para poder establecer espacios de memoria para las posiciones de ese vector, arreglo o matriz.
Cuando se declara un vector, arreglo o matriz que no tiene valores inicializados, el compilador asigna valores arbitrarios (básicamente el número es dado por las posiciones de memoria en donde han sido instanciados si no estoy mal), a las posiciones dadas por la longitud de ese objeto, el compilador exige saber si existen valores para crear los vectores.
Ahora, lo más parecido que podria hacerse es inicializar un valor y asignarlo a un puntero:
Cat c;
//Apuntador p que se crea con el valor de c
Cat *p = &c;
//Asignar el puntero como vacio
p = NULL;
Aunque en este caso, yo deberia preguntar, para que carajos se quiere un vector con elementos nulos, si en este caso, si se tienen solo 5 posiciones asignadas, se puede simplemente generar una nueva posición en tiempos de compilación con un push y listo se genera la nueva posición del vector sin tener ese desperdicio de memoria.
Yo creeria que el error va más por los lados de la capa 8: entre la silla y el teclado