Polymorphism: Compliation Error in the code.Need an Explanation
<p>The following code is giving compilation error as :
"cannot convert from 'Cloneable*' to 'AClass*'" in Line 1.
As per my knowledge, it deals with the concepts of compile time and run time polymorphism.But I do not have a concrete reasoning on this.Kindly help.</p>

<pre><code>struct Cloneable
{
 virtual Cloneable* clone()
  {
  cout &lt;&lt; "Cloneable";
  return new Cloneable;
  }

  virtual ~Cloneable() {}
};


struct AClass : public Cloneable
{
  virtual AClass* clone()
  {
  cout &lt;&lt; "AClass";
  return new AClass;
  }
};

int main()
{ 
 Cloneable* s1 = new AClass;
 AClass* s2 = s1-&gt;clone();      //Line 1
return 0;
}
</code></pre>
