It seems that you are looking for SDL_CreateTextureFromSurface. As you seem to have learned (the hard way), SDL2 doesn't really support rendering surfaces directly anymore. There are ways to do that I believe, but you should be using hardware rendering, which is implemented using surfaces. So, the modern way is to load a surface, convert that into a texture that you can use and then get rid of the surface. So something like
SDL_Surface* image = IMG_Load("yourimage.png");
SDL_Texture* texture = SDL_CreateTextureFromSurface(m_Renderer, image);
SDL_FreeSurface(image);
So, you can load a surface using IMG_Load and then convert that into a texture that you can render using SDL_RenderCopy or I believe SDL_Image even comes with a IMG_LoadTexture these days.
You should note that calling IMG_Load in your render-method is a bad idea as it allocates memory each time, so you want to do this at initialization instead.
I recommend you do some reading on the SDL_Renderer and it's uses. However, if you are insistent on using SDL_BlitSurface instead of the faster new way to render, please let me know.