title: Cannot declare field 'pair' to be of abstract type 'System'
body: <p>My <code>SystemManager</code> has a map of <code>System</code> classes, where each system is mapped to type <code>systype</code></p>
  
  <pre><code>typedef string systype;
  </code></pre>
  
  <p>In the header file, this <code>map</code> is declared:</p>
  
  <pre><code>class SystemManager
  {
      public:
          SystemManager();
          ~SystemManager();
  
          map&lt;systype, System&gt; systems;
  
          System* getSystemPointer(systype);
  };
  </code></pre>
  
  <p>And I try to add a <code>DrawSystem</code> (a class derived from <code>System</code>) to my "systems map" in the constructor:</p>
  
  <pre><code>SystemManager::SystemManager()
  {
      systems["Draw"] = DrawSystem();
  }
  </code></pre>
  
  <p>This gives me the error:</p>
  
  <blockquote>
    <p>cannot declare filed '<code>pair&lt;systype, System&gt;::second</code>' to be of abstract type System</p>
  </blockquote>
  
  <p>I can't figure out what is causing it.</p>
  
  <p>Here are my <code>System</code> and <code>DrawSystem</code> classes in case that matters:</p>
  
  <pre><code>class System
  {
      public:
          System();
  
          systype type;
          vector&lt;cptype&gt; args;
          virtual void update(vector&lt;Cp*&gt;) = 0; //= 0 is for pure virtual function
  };
  
  class DrawSystem : public System
  {
      friend class Game; //allows to draw on render window
      public:
          DrawSystem();
  
          void update(vector&lt;Cp*&gt;);
  };
  </code></pre>