So, I'm trying to store objects that are all derived from the same base class in a Map, and then call a member function from a specific object in the Map. The problem is, that it calls the function in the base class instead of the one from the derived class.
Here is the base class:
 #pragma once
 class State
 {
public:
   virtual ~State(){};
   virtual void update(double dt){}
   virtual void render(){}
};
The derived class:
    #pragma once
    #include "State.h"
    class State_Splash : public State
    {
    public:
        State_Splash();
        ~State_Splash();
        void update(double dt);
        void render();
    };
The class with the Map that stores the state objects:
Header file:
    #include "State.h"
    #include <map>
    #include <string>
    class StateManager
    {
    public:
        StateManager();
        ~StateManager();
        std::map<std::string, State> m_StateMap;
    public:
        void AddState(std::string stateId, State state);
    };
Implementation file:
    #include "StateManager.h"
    StateManager::StateManager(){}
    StateManager::~StateManager(){}
    void StateManager::AddState(std::string stateId, State state){
        m_StateMap.insert(std::pair<std::string, State>(stateId, state));
    }
And last in main, I'm using a StateManager object, and referencing the map in it.(I cut it down a bit and only included the necessary parts)
 int main(int argc, char **argv){
     StateManager stateManager;
     State_Splash _splash;
     stateManager.AddState("splash", _splash);
     stateManager.m_StateMap["splash"].render();//just calls the base class function
