System
클래스에서 상속받은 MovementSystem
클래스가 있습니다. 내가 xxxSystem
의 인스턴스를 저장할 수 있도록 나중에 내가 xxxSystem
클래스의 수를 가지는 맵에이 방법 (시스템 당 하나 개의 인스턴스가) : 내 수업을 필요로하기 때문에C++ 다형성 - 상속 된 클래스의지도
enum
{
MOVEMENT_SYSTEM
};
std::map<int,std::unique_ptr<System>> systems;
systems[MOVEMENT_SYSTEM] = std::unique_ptr<System>(new MovementSystem());
m_entityManager.loadSystems(&systems);
마지막 줄이 EntityManager
모든 시스템에 액세스 할 수 있습니다.
std::map<int,std::unique_ptr<System>> *m_systems; // this line is in the header
void EntityManager::loadSystems(std::map<int,std::unique_ptr<System>> *systems)
{
m_systems = systems;
}
그리고 마지막으로 EntityManager
의 다른 방법으로 내가이 클래스에 이런 식으로 보낸 시스템에 액세스하려고 :
std::unique_ptr<MovementSystem> mvt = (*m_systems)[MOVEMENT_SYSTEM];
mvt->update(dt);
하지만 수를
그러므로 나는이 방법이 이 오류 :
conversion from 'std::map<int, std::unique_ptr<System> >::mapped_type {aka std::unique_ptr<System>}' to non-scalar type 'std::unique_ptr<MovementSystem>' requested
어떻게 해결할 수 있으며 마지막 행을 호출 할 수 있습니까? 업데이트 방법은 MovementSystem
?
표현'* m_systems을 [ MOVEMENT_SYSTEM]'은 당신이 생각하는대로하지 않습니다. [연산자 우선 순위] (http://en.cppreference.com/w/cpp/language/operator_precedence)로 인해'm_systems'가 포인터이기 때문에 작동하지 않는'* (m_systems [MOVEMENT_SYSTEM])'으로 번역됩니다. '(* m_systems) [MOVEMENT_SYSTEM]'을 사용해야합니다. –
나는 그것을했지만 그 오류는 정확히 같다. – Urefeu
접두사 관련 : 1.지도를 가리키는 것이 실수 일 수 있습니다. 2. 전체 디자인이 의심스러워 보입니다. 기본적으로 싱글 톤을 저장하는 맵이 필요한 이유는 무엇입니까? –