The type `T' must be convertible in order to use it as parameter `T' in the generic type or method
<p>I have these two main classes. First the FSMSystem class:</p>

<pre><code>public class FSMSystem&lt;T&gt; : MonoBehaviour where T : FSMSystem&lt;T&gt;
{
    private T m_Owner = default(T);

    protected FSMState&lt;T&gt; currentState;

    private Dictionary&lt;int, FSMState&lt;T&gt;&gt; m_states;

    public FSMSystem(T owner)
    {
        m_Owner = GameObject.FindObjectOfType(typeof(T)) as T; //owner;
        m_states = new Dictionary&lt;int, FSMState&lt;T&gt;&gt;();
    }

    protected void AddState( FSMState&lt;T&gt; state )
    {
        m_states.Add( state.GetStateID(), state );
    }
}
</code></pre>

<p>And the second class, FSMState:</p>

<pre><code>public abstract class FSMState&lt;T&gt;
{   
    public abstract int GetStateID();

    public abstract void OnEnter (FSMSystem&lt;T&gt; fsm, FSMState&lt;T&gt; prevState);
    public abstract void OnUpdate (FSMSystem&lt;T&gt; fsm);
    public abstract void OnExit (FSMSystem&lt;T&gt; fsm, FSMState&lt;T&gt; nextState);
}
</code></pre>

<p>It leads to the following error:</p>

<blockquote>
  <p>error CS0309: The type '<code>T</code>' must be convertible to '<code>FSMSystem&lt;T&gt;</code>' in
  order to use it as parameter '<code>T</code>' in the generic type or method
  '<code>FSMSystem&lt;T&gt;</code>'</p>
</blockquote>

<p>Can someone tell me how to resolve this? I see many other posts similar to this one but I'm not seeing the relationship.</p>
