A base class which provides functionality, but also defines pure virtual functions for its derived classes to implement is called an abstract base class. You cannot create instances of such classes, because you have not defined behaviour for getLifeSpan(). If you would call that function on a Pet object, it would not know what to do.
You can either not create Pet objects if it is intended as a base class only, or you can provide a basic functionality for getLifeSpan(), which could be overloaded by derived classes.
The argument goes, these forum threads are useful for others to read. By removing an important part of the content, it prevents the thread from being of any use to anyone.