En realidad lo que pretende no es leer los caracteres del fichero en un vector, sino iterar por cada uno de los caracteres del fichero, obtener su código ASCII, y usar el vector como acumulador para ver cuántas veces aparece cada carácter. El número de caracteres que tenga el fichero no importa.
El problema por el que no funciona es porque la variable leido es un int, y el stream de salida de un fichero devuelve un char. Si cambias el tipo funcionará.
char en el fondo es un byte, un número sólo que un poco especial, así que si lo asignas a leido con un casting funciona perfectamente.
Por último para no mezclar C++ y C, lo mejor que puedes hacer es seguir usando streams y no descriptores FILE. Lo mismo para malloc / realloc / free. Utiliza el new y el delete. Esto ya es consejo de estilo, pero en teoría debería funcionar igual siempre que no los mezcles ( es decir, no reserves memoria con un new, y liberes con un free, y cosas así)
char leido;
...
...
while ( inFile >> leido )
{
vector[static_cast<int>(leido)]++;
numcaracteres++;
}