读取数据类型为 Class 的 C++ .dat 文件,然后将每一行存储在类型为 Class 的向量中
Read .dat file in C++ whose data is of type Class, then store each line in a vector of type Class
假设我有一个名为 numbers.dat
的 .dat 文件,它包含一个整数列表,如下所示:
1
44
2
5
等等。
然后读取此 .dat 文件并将每个数字放入 int
类型的向量中,我知道该怎么做:
std::ifstream file("numbers.dat");
int x;
std::vector<int> integers;
while(file >> x)
{
integers.push_back(x);
}
file.close
现在,如果我想输出每个整数,我只需要遍历向量,每次执行 cout
。
但在我的例子中,我有一个名为 food.dat
的 .dat 文件,每行有多种数据类型,由制表符分隔,例如
Eggs Eg 1 1.2
Spam Spm 2 1.5
等等。
我创建了一个名为 Food 的 class,字段 name
、symbol
、number
和 cost
类型为 [ =26=、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
是编译器在这两种情况下都会抱怨的部分。
如何避免此错误并使代码编译通过?我的意图是输出向量的每个元素(我已经正确地重载了 <<
运算符来处理 Food 类型的变量)。
我是否应该为 Food 类型的变量重载 "get from" 运算符 >>
以使代码编译?
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;
}
假设我有一个名为 numbers.dat
的 .dat 文件,它包含一个整数列表,如下所示:
1
44
2
5
等等。
然后读取此 .dat 文件并将每个数字放入 int
类型的向量中,我知道该怎么做:
std::ifstream file("numbers.dat");
int x;
std::vector<int> integers;
while(file >> x)
{
integers.push_back(x);
}
file.close
现在,如果我想输出每个整数,我只需要遍历向量,每次执行 cout
。
但在我的例子中,我有一个名为 food.dat
的 .dat 文件,每行有多种数据类型,由制表符分隔,例如
Eggs Eg 1 1.2
Spam Spm 2 1.5
等等。
我创建了一个名为 Food 的 class,字段 name
、symbol
、number
和 cost
类型为 [ =26=、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
是编译器在这两种情况下都会抱怨的部分。
如何避免此错误并使代码编译通过?我的意图是输出向量的每个元素(我已经正确地重载了 <<
运算符来处理 Food 类型的变量)。
我是否应该为 Food 类型的变量重载 "get from" 运算符 >>
以使代码编译?
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;
}