Given that you assign tempSurface a null pointer and then proceed to try use it, then your code still isn't valid. Note that this problem has nothing to do with vectors or references.
In T::InitSurfaceList(SDL_Surface** Screen)
There is a call to SDL_FillRect(which_rect_to_fill, what_rectangle_to_fill, what_color_to_use);
Therefore your argument is invalid.
EDIT: its bean a long day... and i may not think straight. But it does not mother if i set a SDL_Surface* to null at creation, since its pointing to "lets call it random crap"
SDL_FillRect dose not use return to give you a variable, instead it changes it directly as it does it stuff, Saves copy time. Therefore
SDL_FillRect(What_surface_to_modify, What_rect_to_draw_to_surface, What_color_to_use);