尝试读取/写入程序时正确写入文件但未正确读取。
其中l,w,n为ints
,transposed
为bool
。
void Matrix::operator >> (ifstream & f)
{
f >> l; //length (int)
f >> w; //width (int)
f >> n; //size (int)
f >> transposed; //(bool)
theMatrix = vector<double>(0);
double v;
for (int i = 0; i < n; ++i) {
f >> v;
cout << " pushing back " << v << endl;
theMatrix.push_back(v);
}
}
void Matrix::operator<<(ostream & o)
{
o << l;
o << w;
o << n;
o << transposed;
//theMatrix is a vector<double>
for (double v : theMatrix) {
o << v;
}
}
我假设问题是由于read operator >>
不知道在写operator <<
没有写入一定量的位/字节时要读取多少字节。有没有办法澄清读/写的字节数,以便我的程序相应地写入?
我不是C ++的新手,但我对其IO结构不熟悉。我被Java的序列化方法所破坏。
答案 0 :(得分:1)
您要打印的值之间需要空格,因此当您在其中读取它时,它会知道每个值的结束位置。在它们之间留一个空格。为T
类型定义输出运算符的正确方法是使用签名std::ostream& operator<<(std::ostream, const T&)
std::ostream& operator<<(std::ostream o, const Matrix& m)
{
o << m.l << ' ' << m.w << ' ' << m.n << ' ' << m.transposed << ' ';
//theMatrix is a vector<double>
for (double v : m.theMatrix) {
o << v << ' ';
}
}