2016-05-13 14 views
-1

私はOOPプロジェクトに取り組んでおり、ファイルに書き込む必要があり、ファイルを書き込むたびに1つのオブジェクトだけが書き込まれるという問題に直面しました。どのようにしてすべてのオブジェクトのデータを書き込むことができますか?私はこれを試みたが、didntの仕事。ファイルから読み書きする

virtual void save(ofstream outfile) = 0;`// the base class 

void AND2::save(ofstream outf) //derived 
{ 
    outf.open("test.txt"); 
    outf << Component::getype() << " "; 
    outf<< Component::getid() << " "; 
    outf << Component:: graphicsinfomration().x1 << " "; 
    outf<< Component::graphicsinfomration().x2 << " "; 
    outf << graphicsinfomration().y1 << " "; 
    outf << graphicsinfomration().y2 << " "; 
    outf << endl; 
    outf.close(); 
} 
else   
{ 
    ofstream outf; 
    for (int i = 0; i < (pApp->getcompcount()); i++) 
    { 
     //ask user to enter text name 
     c[i]->save(outf); 
    } 
    pOut->ClearStatusBar(); 
} 
+0

*ループ*で繰り返し実行しているとしますか?そして、私はあなたがその出力ファイルストリーム*をあなたの関数に渡すことができたのは不思議です。それにもかかわらず、*呼び出し元が既にオープンしているファイルストリームを参照で*送ることができます。 – WhozCraig

+0

ストリームは参照渡しにする必要があります。通常、コピーを渡すとエラーメッセージが生成されます。 –

+0

保存機能は毎回同じファイルを上書きします。それを開いて、最後にデータを追加する必要があります(例: 'outf.open(" test.txt "、std :: ofstream :: out | std :: ofstream :: app);'。 –

答えて

0

ファイルを何度も開いているので、もう一度内容を何度も上書きするためです。

ストリームをforループの外側で一度開き、参照渡ししたいとします。

関連する問題