2012-03-24 154 views
0
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("[email protected]", "LIME", "Manager", "ming", "ding", "Newston", "43", "873"); 
    em.AddNode("[email protected]", "NOKIA", "CEO", "rew", "nbv", "Europe", "0411-789-6548", "985-257-1111"); 
    //em.writeFile(); 
} 

我想寫鏈接列表作爲一個對象的文件,而不是像我在tryWrite函數中的單獨。任何幫助?如何寫一個鏈接列表對象到一個文件

+0

我知道它看起來很複雜,但我試圖將鏈接列表作爲對象寫入文件,而不是像我在tryWrite函數中一樣。任何幫助? – 2012-03-24 19:02:07

+4

在那裏應該有一個問題嗎?此外,縮進你的代碼四個空格,使其顯示整齊。 – 2012-03-24 19:02:14

+0

閱讀我對這個問題的評論,請@BenVoigt – 2012-03-24 19:03:41

回答

0

您顯示的代碼不完整,無法編譯。您缺少類成員變量的聲明。 EmployerList的構造函數可能應該採取const Employer &並存儲該值;它不應該處理用於初始化僱主的所有變量。

寫一個鏈接列表到文件是微不足道的。你不能有意義地寫指針;您必須以標準化,易讀的格式編寫每個項目的數據值。您可以在文件中使用鄰近度來指示「下一個」(和「prev」)關係。這個過程在輸出時稱爲「序列化」,在輸入時稱爲「反序列化」。


這成語:

Employer *node = new Employer(Email, cName, pos, fName, lName, addr, tHome, tMobile); 

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

是陳舊的(預標準,這意味着-1998預標準)C++。你沒有調用一個'沒有拋出'的分配器;如果分配失敗,則拋出異常。因此分配檢查是多餘的。

這不會導致直接的問題;測試只是浪費(並且不必要地縮進你的代碼)。如果你的教科書使用這種技術,你應該可以得到一個更新的教科書。

(我也注意到,我不得不修復了間距使代碼保持一致;在編程的一致性是非常重要的)

1

簡短的回答是「不,你不能這樣做。」

鏈接列表,非常符合定義,包含指針。至少對於長期存儲(即任何在程序的單次執行之外存活的任何東西),通過將指針存儲到磁盤,然後再將其讀回來,不會得到任何有意義的東西。

序列化數據結構包含指針的指針通常需要「追逐」這些指針,並以某種方式「扁平化」結構。對於線性鏈表,您可能只想按順序編寫節點。另一種可能是將文件中的偏移量替換爲內存指針。如果您需要在磁盤上維護相同類型的結構(例如,您需要一個可以作爲實際樹在磁盤上操作的樹,而不僅僅是一系列記錄),那麼這將非常有用。

不管怎麼說,只要存儲原始數據不太可能有用。

0

如果您的意思是將鏈接列表存儲到磁盤上與存儲在內存中的內容完全相同,則不能。由於鏈表中的指針是「易變的」,因此當您在不同的時間運行應用程序時,它們指向的內容可能會非常不同。這意味着堅持指針本身是沒有意義的。

但是,您可以將節點保存在鏈接列表中,以及它們之間的關係(以前由指針維護)到磁盤。如果您使用單個鏈接列表,只需從頭到尾逐個存儲節點。

相關問題