2012-03-24 32 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関数のように単独ではなくオブジェクトとしてファイルにメインのリンクリストを書き込もうとしています。どんな助け? –

+4

どこかに質問がありますか?また、すべてのコードを4つのスペースでインデントして、きちんと表示させます。 –

+0

質問に対する私のコメントを読んでください。@BenVoigt –

答えて

0

表示されたコードは不完全でコンパイルされません。クラスメンバー変数の宣言がありません。 EmployerListのコンストラクタにはおそらくconst Employer &があり、それを格納しているはずです。それは、雇用者を初期化するために使用されるすべての変数を扱うべきではありません。

リンクされたリストをファイルに書き込むことは、やや難解です。ポインタを意味のある形で書くことはできません。各アイテムのデータ値を標準化された読みやすい形式で書き込む必要があります。あなたは 'next'(と 'prev')関係を示すためにファイル内でproximityを使用します。このプロセスは出力時には「シリアライゼーション」と呼ばれ、入力時には「デシリアライゼーション」と呼ばれます。


このイディオム:

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

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

C++(標準化前の、前-1998標準を意味する)古風です。あなたは 'スロー'アロケータを起動しませんでした。割り当てが失敗した場合、例外がスローされました。したがって、割り当てチェックは冗長です。

これは直接の問題を引き起こしていません。テストは無駄です(必要以上にコードをインデントします)。あなたのテキストブックがこのテクニックを使用する場合は、おそらくより新しいテキストブックを入手するべきです。

(私も、私は、コードの一貫性を保つために間隔を修正しなければならなかったことに注意してください;。プログラミングの一貫性は非常に重要である)

1

短い答えは「いいえ、あなたはそれを行うことはできません。」

ほとんどの場合、リンクリストにはポインタが含まれています。少なくとも長期間の記憶(プログラムの1回の実行以外で生き残るもの)であれば、ディスクへのポインタを格納してからそれを読み込むことで意味のあるものを得ることはできません。

データ構造のシリアライズこれらのポインタを「追跡」し、何らかの形で構造を「平坦化」する必要があります。リニアリンクリストの場合、ノードを順番に書きたいと思うかもしれません。もう1つの可能性は、ファイルのオフセットをメモリへのポインタに置き換えることです。これは主に、ディスク上に同じタイプの構造を維持する必要がある場合に便利です(たとえば、一連のレコードではなく、実際のツリーとしてディスク上で操作できるツリーが必要な場合)。

とにかく、生データを保存するだけでは役に立ちません。

0

リンクリストをメモリに保存されているものとまったく同じディスクに保存することを意味する場合は、できません。リンクされたリスト内のポインタは「揮発性」なので、異なる時間にアプリケーションを実行すると、それらが指しているものが大きく異なることがあります。つまり、ポインタ自体を永続化することは意味がありません。

しかし、ノードをリンクされたリストと、それらの関係(これまではポインタによって保持されていた)をディスクに永続化することができます。 1つのリンクされたリストを使用している場合は、先頭から最後までノードを1つずつ保管してください。

関連する問題