Hrm... where exactly are you getting 'pos' from now? It looks as though you're keeping it stored in a global, so that you can re-open and re-close the file for each object construction.
Constructing from a stream object would indeed be cleaner (no reopening or reclosing needed; just re-pass the same stream each time, as it has already 'advanced' to the right position). But yes, you don't really get to declare arrays of non-default-constructed objects in C++ - a rather annoying language limitation.
In your case, the solution I would propose is not to load into an array anyway, but instead into a std::vector. That will also free you from having to know (or somehow indicate) how many rooms are indicated in the file.
Something like:
std::vector<area> rooms;std::ifstream data("rooms.txt");while (!data.eof()) { rooms.push_back(area(data));}