Поэтому я работаю над созданием игрового движка на C ++, просто для целей обучения. Я пытаюсь следовать системе компонентов сущностей, и у меня возникают проблемы при добавлении компонентов в мою сущность.
В моем классе Entity я хочу хранить все компоненты этого объекта в: 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
Задача ещё не решена.
Других решений пока нет …