Not declared in scope means that the compiler doesn't know what a Home or Forest are because you haven't declared or defined them previously. In the example I gave above I have a base class "foo" and then 2 derived classes "c1" and "c2". In your case you would make 2 classes "Home" and "Forest" which derive from Map_Segment. Take a look at this maybe: http://www.cplusplus.com/doc/tutorial/polymorphism/
Those are instances of Map_Segment not new classes that derive from it, but yes they work just fine as well. The only criteria for storing in Maps array is that all items are of type Map_Segment (which instances certainly are, and derived classes would also be)