C++ 如何将链表对象写入文件

C++ 如何将链表对象写入文件,c++,file,linked-list,C++,File,Linked List,我试图将链表作为一个对象写入文件,而不是像tryWrite函数中的那样。有什么帮助吗?您显示的代码不完整,无法编译。缺少类成员变量的声明。employeerlist的构造函数可能需要一个const雇主&并存储它;它不应该处理用于初始化雇主的所有变量 将链接列表写入文件是一件相当棘手的事情。你不能有意义地写指针;您必须以标准化、易读的格式写入每个项目的数据值。您可以在文件中使用邻近性来指示“下一个”(和“上一个”)关系。这个过程在输出时称为“序列化”,在输入时称为“反序列化” 这个成语: voi

我试图将链表作为一个对象写入文件,而不是像tryWrite函数中的那样。有什么帮助吗?

您显示的代码不完整,无法编译。缺少类成员变量的声明。
employeerlist
的构造函数可能需要一个
const雇主&
并存储它;它不应该处理用于初始化雇主的所有变量

将链接列表写入文件是一件相当棘手的事情。你不能有意义地写指针;您必须以标准化、易读的格式写入每个项目的数据值。您可以在文件中使用邻近性来指示“下一个”(和“上一个”)关系。这个过程在输出时称为“序列化”,在输入时称为“反序列化”


这个成语:

void writeFile(){
    Employer *temp = head;
    while (temp != NULL)
    {
        temp->tryWrite();//Employee's display method called here
        temp = temp->getNext();
    }
}

void main(){
    EmployerList em;
    em.AddNode("des@yahoo.com", "LIME", "Manager", "ming", "ding", "Newston", "43", "873");
    em.AddNode("sw@gmail.com", "NOKIA", "CEO", "rew", "nbv", "Europe", "0411-789-6548", "985-257-1111"); 
    //em.writeFile();
}

是古(预标准,意为1998年前标准)C++。您没有调用“禁止抛出”分配器;如果分配失败,将引发异常。因此,分配检查是多余的

这不会造成直接问题;测试只是浪费(而且代码缩进的程度超出了需要)。如果你的教科书使用这种技术,你可能会得到一本更新的教科书

(我还注意到我必须调整间距以使代码一致;编程中的一致性非常重要。)

简短的回答是“不,你不能这样做。”

根据定义,链表包含指针。至少对于长期存储(即,在程序的一次执行之外幸存下来的任何东西),通过存储指向磁盘的指针,然后将其读回,您无法获得任何有意义的东西

序列化包含指针的数据结构通常需要“追踪”这些指针,并以某种方式“展平”结构。对于线性链表,您可能只想按顺序写入节点。另一种可能是用文件中的偏移量替换指向内存的指针。如果您需要在磁盘上维护相同类型的结构(例如,您需要一个可以在磁盘上作为实际树操作的树,而不仅仅是一系列记录),那么这一点非常有用


不过,不管怎么说,只存储原始数据不太可能有用。

如果要将链表存储到磁盘,与存储在内存中的内容完全相同,则不能。因为链表中的指针是“易变的”,所以当您在不同的时间运行应用程序时,它们所指向的东西可能会非常不同。这意味着保留指针本身是没有意义的


但您可以将链接列表中的节点以及它们之间的关系(以前由指针维护)持久化到磁盘。如果使用单个链表,只需从头到尾逐个存储节点。

我知道这看起来很复杂,但我正在尝试将链表作为对象写入文件,而不是像tryWrite函数中那样单独写入。有什么帮助吗?里面应该有问题吗?另外,将所有代码缩进四个空格,使其显示整齐。请阅读我对问题的评论@BenVoigt@TT:相反-你应该把你的问题变成一个问题;我们不必推断这个问题。特别是,您可以编辑自己的问题,以使用额外信息进行更新。点击问题下方的“编辑”按钮。
    Employer *node = new Employer(Email, cName, pos, fName, lName, addr, tHome, tMobile);  

    //if memory was sucessfully allocated
    if (node != NULL)