Так что я работаю над созданием игрового движка на C ++, просто для целей обучения. Я пытаюсь следовать системе компонентов сущностей, и у меня возникают проблемы при добавлении компонентов в мою сущность.
В моем классе сущностей я хочу хранить все компоненты этой сущности в: std::map<type_index, std::shared_ptr<Component>> components;
Когда я добавляю компонент, у меня есть этот метод в файле .h моего класса Entity:
template<typename T, typename... TArgs>
std::shared_ptr<T> addComponent(TArgs&&... mArgs) {
std::shared_ptr<T> component(new T(std::forward<TArgs>(mArgs)...));
component->entity = this;
component->init();
// This is where the error is being thrown
components.emplace(type_index(typeid(*component)), component);
return component;
}
тем же способом я также сделал несколько разных вещей, таких как попытка добавить компоненты, такие как components[std::type_index(typeid(*component))] = component;
вместо использования emplace, и затем я также попытался std::move
компонент на карту.
Моя точная ошибка:
Unhandled exception thrown: read access violation.
**std::forward<std::_Tree_node<std::pair<std::type_index const ,std::shared_ptr<Component> >,void *> * &>**(...) returned 0x4. occurred