Как уже указывали другие, одна проблема заключается в том, что вы читаете данные в локальные переменные (code
, name
и coy
), но никогда не помещаете эти значения в machine
до того, как добавите их в вектор.
Однако это не единственная проблема. Ваш while (!infile.eof())
тоже неверен (на самом деле, while (!whatever.eof())
по существу всегда неверен). Что вы обычно хотите сделать, так это продолжить чтение, пока чтение было успешным. whatever.eof()
вернет значение true только после того, как вы попытаетесь выполнить чтение и достигнете конца файла до начала чтения.
Обычно я исправляю это, определяя экстрактор потока для вашего класса Machine:
class Machine {
// ...
friend std::istream &operator>>(std::istream &is, Machine &m) {
std::getline(is, m.code, ':');
std::getline(is, m.name, ':');
std::getline(is, m.coy, ":");
return is;
}
};
Используя это, вы можете читать что-то вроде этого:
std::vector<Machine> machines;
Machine machine;
while (infile >> machine)
machines.push_back(machine);
После того, как вы определили экстрактор потока для типа, есть еще одна возможность, которую следует рассмотреть; вы можете инициализировать вектор из пары итераторов:
std::vector<Machine> machines((std::istream_iterator<Machine>(infile)),
std::istream_iterator<Machine>());
... и это будет считывать все данные из файла (используя operator>>
, который мы определили выше) и использовать их для инициализации вектора machines
.
person
Jerry Coffin
schedule
27.01.2013
while(!inFile.eof())
здесь неверно. Какая книга поручила вам это сделать? - person Lightness Races in Orbit   schedule 27.01.2013