假设我有一个名为 numbers.dat
的 .dat 文件它由一个整数列表组成,如下所示:
1
44
2
5
等等。
然后从这个 .dat 文件中读取并将每个数字放入 int
类型的 vector 中,我知道该怎么做:
std::ifstream file("numbers.dat");
int x;
std::vector<int> integers;
while(file >> x)
{
integers.push_back(x);
}
file.close
现在,如果我想输出每个整数,我只需要遍历 vector ,执行 cout
每次。
但就我而言,我有一个名为 food.dat
的 .dat 文件每行有多种数据类型,由制表符分隔,例如
Eggs Eg 1 1.2
Spam Spm 2 1.5
等等。
我创建了一个名为 Food 的类,其中包含字段 name
, symbol
, number
, 和 cost
, 属于 string
类型, string
, int
, 和 double
分别。现在,如果我尝试与以前相同的方法,但进行适当的更改:
std::ifstream file("food.dat");
Food f; // the constructor for Food handles default values
std::vector<Food> vec;
while(file >> f)
{
vec.push_back(f);
}
file.close;
我得到编译器错误:
error: invalid operands to binary expression('std::ifstream' (aka 'basic_ifstream<char') and Food)
while (file >> f)
所以我尝试了其他方法,这次我只是尝试读取文件中的第一行以检查它是否有效。
std::ifstream file("food.dat");
Food f;
file >> f;
file.close();
但这给出了与以前相同的编译器错误。我发现代码片段 file >> f
是编译器在这两种情况下都会提示的部分。
我怎样才能避免这个错误并使代码编译通过?我的意图是输出 vector 的每个元素(我已经正确地重载了 <<
运算符来处理 Food 类型的变量)。
我是否应该重载“get from”运算符,>>
Food 类型的变量以使代码编译?
最佳答案
How can I avoid this error and make the code compile?
你需要定义一个函数
std::istream& operator>>(std::istream& in, Food& f) { ... }
适本地。
例如
std::istream& operator>>(std::istream& in, Food& f)
{
return in >> f.name >> f.symbol >> f.number >> f.coset;
}
关于c++ - 读取C++中数据类型为Class的.dat文件,然后将每一行存储在Class类型的vector中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48372581/