我有一個MovementSystem
類,繼承自System
類。後來,我將有一批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 [MOVEMENT_SYSTEM])',它不起作用,因爲'm_systems'是一個指針。您需要使用'(* m_systems)[MOVEMENT_SYSTEM]'。 –
我已經完成了,但錯誤是完全一樣的。 – Urefeu
切線相關:1.指向地圖可能是錯誤的。 2.整個設計看起來很可疑。爲什麼你需要一個基本上存儲單身人士的地圖? –