You can't have instances of abstract classes. Instead as of your sample does, try the following:
std::vector<std::shared_ptr<entity> > entityTbl;
entityTbl.push_back( new zombie(...) );
entityTbl.push_back( new mutant(...) );
Since the above sample will only work with c++11, as a fallback solution you can use
std::vector<entity*> > entityTbl;
Code to fill the table is the same. But you'll need to delete
the items from entityTbl
, before it's destructed (goes out of scope):
for(std::std::vector<entity*> >::iterator it = entityTbl.begin();
it != entityTbl.end();
++it) {
delete *it;
}