System
クラスを継承するMovementSystem
クラスがあります。私はxxxSystem
のインスタンスを格納しますので、その後、私はxxxSystem
クラスの数を持っていますマップにこの方法(システムごとにインスタンスが1つしかない):私は私のクラスを必要とするので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
すべてのシステムにアクセスできます。
そこで私はこの方法があります:私は、私はクラスにこの方法を送ったシステムにアクセスしよう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;
}
そして最後に:
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.デザイン全体が疑わしいように見えます。基本的にシングルトンを格納するマップが必要なのはなぜですか? –