Better comments, give Area a Building item (and remove workers, since Building tracks that.
Rename Area::my_building to Area::building.  The Area constructor automatically sets the building's type.
Constructor/destructor for Building.  Building::set_type() sets its type and clears construction queues.
Rename macro _flat() to _produces() - these aren't flat bonuses, they're what each worker produces.
Fix compile-time errors.  Change references to Area::workers to Area::building.workers.
Fix compile-time errors.
Move Resource_amount struct and give it the chance to be infinite in the same way as Crop_amount and Mineral_amount.