Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将包含结构的向量序列化为.dat文件有什么不对?_C++_Serialization_Vector_Fstream - Fatal编程技术网

C++ 将包含结构的向量序列化为.dat文件有什么不对?

C++ 将包含结构的向量序列化为.dat文件有什么不对?,c++,serialization,vector,fstream,C++,Serialization,Vector,Fstream,如果我输入 描述:苹果 数量:10 批发成本:30 零售成本:20 添加日期:12月 以下是my.dat文件中的内容: 1应用103020年12月 但是当我加载我的程序时,它没有正确地加载结构,导致列表中有0项。这就是它应该看起来的样子,还是我做错了什么 代码: #包括“stdafx.h” #包括 #包括 #包括 #包括 使用名称空间系统; 使用名称空间std; #布拉格语hdrstop bool-isValidChoice(int-size,int-choice); 模板 void write

如果我输入

描述:苹果

数量:10

批发成本:30

零售成本:20

添加日期:12月

以下是my.dat文件中的内容:

1应用103020年12月

但是当我加载我的程序时,它没有正确地加载结构,导致列表中有0项。这就是它应该看起来的样子,还是我做错了什么

代码:

#包括“stdafx.h”
#包括
#包括
#包括
#包括
使用名称空间系统;
使用名称空间std;
#布拉格语hdrstop
bool-isValidChoice(int-size,int-choice);
模板
void writeVector(流和流、常量向量和向量);
模板
矢量读取矢量(ifstream&in);
模板
矢量附加项(矢量和矢量);
模板
无效打印项目描述(矢量和矢量);
模板
int显示记录(矢量和矢量);
结构目录项{
字符串描述;
整数;
批发成本;
零售成本;
已添加字符串;
} ;
内部主(空)
{
在您的读取功能中:

   if (in.fail())
应该是:

   if ( ! in.fail())
或者更好:

int n;

if ( ! (in >> n) ) {
  n = 0;
}
在read函数中:

   if (in.fail())
应该是:

   if ( ! in.fail())
或者更好:

int n;

if ( ! (in >> n) ) {
  n = 0;
}

为结构项目使用一些分隔符,例如“”(空格)

为结构项目使用一些分隔符,例如“”(空格)

保存DAT文件时,需要在字符串之间添加空白(空格/制表符)

使用运算符>>读取字符串时,它将读取字符串,直到找到第一个空白字符(空格/制表符/下线)

从您的代码:

ostream &operator<<(ostream &out, const InventoryItem &i)
{
    out << i.Description << ' ';
    out << i.Quantity << ' ';
    out << i.wholesaleCost  << ' ' << i.retailCost  << ' ';
    out << i.dateAdded  << ' ';
    return out;
}
ostream&operator保存DAT文件时,需要在字符串之间添加空格(空格/制表符)

使用运算符>>读取字符串时,它将读取字符串,直到找到第一个空白字符(空格/制表符/下线)

从您的代码:

ostream &operator<<(ostream &out, const InventoryItem &i)
{
    out << i.Description << ' ';
    out << i.Quantity << ' ';
    out << i.wholesaleCost  << ' ' << i.retailCost  << ' ';
    out << i.dateAdded  << ' ';
    return out;
}

ostream&operator同样,序列化不是一项简单的任务。如果你能花时间学习一个库


我不打算重发我对您提出的上一个问题的回答,但我相信您真的应该仔细看看。它解释了您面临的一些问题并提供了解决方案。

再次强调,序列化不是一项简单的任务。如果您能花时间学习一个库


我不打算重复我给你上一个问题的答案,但我相信你真的应该看一看。它解释了你面临的一些问题并提供了解决方案。

我做过一次,我得到的向量错误太大,因为我的向量被设置为超过2000万之类的大小。我如何预防如果文件是空的,我会设置向量大小吗?是的,我这样做了,我得到了一个致命的错误,因为大小是几百万。失败是没有用的,我想是吧?我做过一次,我得到了向量太大的错误,因为我的向量被设置为超过2000万的大小等等。如果文件是空白的?是的,我这样做了,我得到了一个致命的错误,因为大小是几百万。失败是没有用的,我想是吧?嗯,我不知道该怎么做。我已经做了好几个小时了…你能提供一个如何做的例子吗?嗯,我不知道该怎么做。我已经做了好几个小时了您是否提供了一个如何执行此操作的示例?好吧…如果您的描述包含空格…您在加载时仍然会遇到问题…因为描述加载将限于第一个。对于序列化/反序列化,您需要一些更先进的东西,请参阅,例如Boost.serialization。好吧…如果您的描述包含ains空格…您在加载时仍然会遇到问题…因为说明加载将限于第一个。对于序列化/反序列化,您需要在我的建议中进行更深入的改进。请参阅,例如Boost.serialization.Sorry。我确实阅读了您的链接。我只是尝试完成我的项目,以便查看它以获得工作参考ce我能理解。我已经在这里呆了15个多小时了…所以请理解我为什么要在这里问这么多问题。我真的非常感谢你给我的所有帮助。没关系。我希望它能帮助你:)对不起。我读了你的链接。我只是想完成我的项目,这样我就可以查看它作为我能理解的工作参考nd.我已经做了15个多小时了……所以请理解我为什么要在这里问这么多问题。我真的非常感谢你给我的所有帮助。没关系。我希望这对你有帮助:)