You cannot directly instantiate an instance of an abstract class, but must instead instantiate an instance of a fully implemented subclass.
So this is legal:
Housecat* theCats = new Housecat[200];
and then you can access each cat through the Cat interface
bool catsMeow = ((Cat*)(&theCats[0]))->CanMeow();
But the compiler has no way of knowing how to instantiate an abstract class; in fact, the very fact that it's abstract means that it cannot be directly instantiated.
Why do this? Because Cat will have an abstract method
bool CanMeow() = 0;
That all inherited cats must implement. Then you can ask if it can meow, with the chance that an instance of Lion will return false.