gpt4 book ai didi

c++ - 将列表导出到文件时重复写入列表的最后一个对象

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:42 25 4
gpt4 key购买 nike

这是我一次将一个列表导出到一个文件的方法:

#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 file\n"))
{ 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 个对象(item1、item2、item3)。当我调用这个方法时,cout 将以正确的顺序显示列表的正确内容。但是,当我查看输出文件/使用我的程序加载文件时,我会看到最后一个对象(item3、item3、item3)的 3 个重复项。我做错了什么?

最佳答案

此行不会生成您的Radio_Data 对象的正确地址:

file.write((char *)&listIter, sizeof(Radio_Data));

您应该在获取对象地址之前取消引用迭代器,如下所示:

file.write((char *)&(*listIter), sizeof(Radio_Data));

由于 *listIter 评估为对迭代器指向的对象的引用,&(*listIter) 评估为指向相应 Radio_Data< 的指针 对象。

关于c++ - 将列表导出到文件时重复写入列表的最后一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23163568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com