Вы разместили код для чтения файлов, а не для создания пустых - вам не нужно расширять свой вопрос в этом отношении. И то, что вы опубликовали, не является хорошим кодом для чтения. Функция eof () обнаруживает конец файла после чтения, а не перед ним - в принципе, вы почти никогда не должны его использовать. Вместо этого вы должны проверить успешность каждого чтения:
while( (city >> cityName) && (latitude >> lat) && (longitude >> lon) {
t.add(cityName, lat, lon);
}
Кроме того, если вы хотите создать входной поток, почему бы не сделать это явно, используя объект ifstream:
ifstream city( "city.txt" );
Нет необходимости возиться с флагами ios. Вы действительно должны проверить, работает ли open тоже:
if ( ! city.is_open() ) {
throw "open failed" ; // or whatever
}