2016-10-23 1 views
0

Ich habe zwei typedefs:std :: unordered_map Zugriffsverletzung auf emplace

typedef std::function<void(SDL_Event)> EventCallback; 
typedef std::unordered_map<std::string, EventCallback> EventCallbackContainer; 

Und in meinem EventManager Klasse ich nur hinzufügen, wie folgt aus:

EventCallbackContainer m_eventCallbackContainer; 

ich von keiner Weise kennen ein initialisieren Karte und wie ich es verstanden habe, sollte ich auch nicht haben.

Im EventManager Ich habe eine addCallback Template-Funktion, die ich anrufe, es emplaces es dann in die std::unordered_map aber wie ich mich eine Zugriffsverletzung erhalten, an dem VS sehen suche es scheint, wie die std::unordered_mapNULL ist.

Die addCallback Funktion:

template<class Class> 
inline void EventManager::addEventCallback(std::string gameStateID, void(Class::* func)(SDL_Event), Class* instance) 
{ 
    EventCallback callback = std::bind(func, instance, std::placeholders::_1); 
    m_eventCallbackContainer.emplace(gameStateID, callback); 
} 

VS Uhr: enter image description here

Ich bin nicht sicher, warum dies der Fall ist, oder wie ich es beheben könnte.

Projekte gesamte Code-Basis, wenn Sie mehr Kontext benötigen (fühlen sich nicht verpflichtet, obwohl zu sehen, ist es nicht als Codereview soll): Github with codebase

+2

Ist 'das' null? – user2357112

+0

Seufz, ja scheint so, lass mich dann noch einen Blick darauf werfen. –

+1

MEIN SCHLECHTES, fand das Problem, danke, nett anon. Ich initialisierte eine andere Klasse vor meinem eventManager, die addCallback aufruft, was bedeutet, dass sie sie aufruft, bevor der EventManager überhaupt existiert. Danke nochmal! –

Antwort

1

ich dumm wurde. Anscheinend initialisierte ich eine Klasse, die addCallback aufruft, bevor ein EventManager erstellt wurde.

HINWEIS ZUM SELBST: Denken Sie daran zu prüfen, ob this NULL ist.

Verwandte Themen