2011-03-27 10 views
0

ファイルから読み込んだ後にリンクリストを作成しようとしています。私はそれを実行すると、単にハングアップします。私は問題が&コースの割り当てに関連していることを知っています(私は間違っているかもしれません)。 ご指摘いただければ幸いです。自己参照オブジェクトのバイナリファイルからメモリ内のリンクリストを作成するC++

Course course;//this one to read from file 
Course* fileCourse = new Course();//this populates linked list 
fstream Read("Courses.dat", ios::in | ios::binary); 
if(!Read) 
    cout << "Error Reading from file Courses.dat\n" << endl; 
else 
{ 
    Read.read(reinterpret_cast<char*>(&course), sizeof(Course)); 
    fileCourse->setNextCourse(&course);//problem here perhaps? 
    while(Read && !Read.eof()) 
    { 
     Read.read(reinterpret_cast<char*>(&course), sizeof(Course)); 
     fileCourse->setNextCourse(&course); 
     if(head == NULL) 
     { 
      head = fileCourse; 
     } 
     else 
     { 
      Course* tmp = head; 

      tmp = tmp->getNextCourse(); 

      while(tmp->getNextCourse() != NULL) 
      { 
       tmp = tmp->getNextCourse(); 
      } 
      tmp->setNextCourse(fileCourse); 
     } 
    } 
} 

答えて

0

コースはtahtにPOD(プレーン古いデータ)ではない場合、それはあなたが、それはファイルのバイト単位の書き込み、その後にそれを読むと期待することができない場合があり埋め込まれたメンバ関数、ポインタ、などを持っています有効なオブジェクトを持つこと。保存時にデータをシリアライズしてから、データをデリリアライズして有効なオブジェクトに戻す必要があります。これは、ストリーム演算子< <と>>をオーバーロードしてクラスをファイルに出力/入力することによって行われることがあります。シリアライズのための一般的なデータフォーマットには、XMLやJSON、あるいはポインタを持たないバイナリデータだけが含まれます。

あなたが発生しているエラーは、おそらくこの質問に報告されているものに似ています:C++ Reading Objects from File Error

+0

問題は、ファイルからCourseオブジェクトを読み取った後、そのままでは有効ではないという事実にありました。私はプライマリコンストラクタを呼び出し、このようなデータから新しいオブジェクトを作成することを余儀なくされました。 fileCourse = newCourse(course.getName()、course.getCode()); –

2
  1. はこの宿題ですか?もしそうなら、そのようにタグを付けます。
  2. リンクリストをn個のアイテム(この場合はCourseオブジェクト)に設定するには、new Course()を割り当てるオブジェクトをnとする必要があります。このコードではいくつのオブジェクトを割り当てていますか?
+0

+1:正確に!うまくいけば、OPはこのヒントを受け取り、彼が取り組む必要がある少なくとも1つの重大な問題を見つけることができます。 – AAT

+0

オブジェクトはRead.eof()に達するまで作成されています。そして「宿題」はそれが主要な課題であるという言葉ではなく、私はその特定のセクションで助けが必要でした。確かに非倫理的であれば謝る。 –

+0

@DonaldTyson:投稿したコードは、正確に* 2つのオブジェクト( 'course'と' fileCourse')を作成します。これらのうち、1つはローカルであり、このコードが範囲外になった後も生き残ることはできません。したがって、実際にはここに*正確に1つの*オブジェクトを作成しています。問題を参照してください? – Jon