正如其他人已经指出的那样,一个问题是您将数据读入局部变量(code
, name
and coy
),但永远不要将这些值放入machine
在将其添加到向量之前。
That's not the only但有问题。你的while (!infile.eof())
也是错误的(事实上,while (!whatever.eof())
本质上是always错误的)。你通常想做的是在阅读成功的同时继续阅读。whatever.eof()
仅当您尝试读取并到达文件末尾后才会返回 truebefore朗读开始了。
我通常解决这个问题的方法是为您的 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
vector.