将列表导出到文件时,会重复写入列表的最后一个对象
Last object of list is written repeatedly when exporting list to file
这是我用来将列表一次导出一个对象到文件的方法:
#define DATA_FILE "output.txt"
void File_Data::Save_Data(void)
{
fstream file;
remove(DATA_FILE);
file.open(DATA_FILE, ios::out | ios::binary);
file.seekg(ios::beg);
for (listIter = listCont.begin(); listIter != listCont.end(); listIter++)
{
file.write((char *)&listIter, sizeof(Radio_Data));
if (File_Error(file, "nCan't update filen"))
{ return; }
cout << "nRecord " << listIter->GetName() << " added to file.n" << endl;
cout << "Name: " << listIter->GetName() << endl;
cout << "Callsign: " << listIter->GetCallsign() << endl;
cout << "Band: " << listIter->GetBand() << endl;
cout << "Frequency: " << listIter->GetFrequency() << endl;
cout << "Type: " << listIter->GetType() << endl;
cout << "City: " << listIter->GetCity() << endl;
cout << "Phone: " << listIter->GetPhone() << endl;
cout << "Website: " << listIter->GetWebsite() << endl;
}
file.close();
}
比方说,我在列表中有3个对象(项目1、项目2、项目3)。当我调用这个方法时,cout将以正确的顺序显示列表的正确内容。然而,当我用程序查看输出文件/加载文件时,我会看到最后一个对象的3个重复(item3,item3,item3)。我做错了什么?
此行不会生成Radio_Data
对象的正确地址:
file.write((char *)&listIter, sizeof(Radio_Data));
在获取对象地址之前,您应该取消对迭代器的引用,如下所示:
file.write((char *)&(*listIter), sizeof(Radio_Data));
由于*listIter
计算为迭代器指向的对象的引用,因此&(*listIter)
计算为指向相应Radio_Data
对象的指针。
相关文章:
- 读取文件的最后一行并输入到链接列表时出错
- 删除列表 c++ 中的最后 3 个元素
- 测试迭代器是否位于列表中的最后一个
- 删除链接列表中剩余的最后一个节点
- 避免在使用链接列表从 deque 中删除最后一个节点时出现内存泄漏
- 遍历列表包含排除最后一个元素的内容
- 循环中列表的最后一个元素
- 链接列表中最后一项之后的项目是否为0
- 无法从列表末尾获取最后两个所需的元素 c++,mfc
- 计算列表中与线性链接列表中最后一个节点具有相同数据的节点的数量
- 在删除双重链接列表中的最后一个元素时,请阅读访问违规行为
- 如何区分浮点列表中的最后一个浮点值
- 获取列表的第一个和最后一个元素<string>给我非法指令错误
- 如何在没有最后一个元素的情况下迭代列表
- 迭代时删除列表中的最后一个元素会导致错误
- 删除链接列表中的最后一个节点
- 自定义列表实现迭代器无法访问最后一个元素 (c++)
- 删除链接列表的最后一个节点
- 是否可以删除链接列表中的最后一个节点
- 将连字符作为元素包含在scanf()的扫描集中,如果它是列表中的第一个字符或最后一个字符