動的インデックス (d = {0,...,NUM_DEMES-1}) によって添字付けされた出力ファイルを作成しようとしています。現在、最初の値 (d=0) の出力ファイルのみを取得しています。
#include <sstream>
#include <string>
void Simulation::updateSimulation( double t )
{
...
ofstream abundanceStream;
ofstream abHeaderStream;
if ( step == 1 ) {
for ( int d = 0; d < NUM_DEMES; d++ ) {
abundanceStream.open( makeFilename( "Abundances_", d ).c_str(),ios::out);
abHeaderStream.open( makeFilename( "Abundances_IDs_", d ).c_str(),ios::out);
}
}
for ( int d = 0; d < NUM_DEMES; d++ ) {
abundanceStream.open( makeFilename( "Abundances_", d ).c_str(),ios::app);
abHeaderStream.open( makeFilename( "Abundances_IDs_", d ).c_str(),ios::app);
}
}
string Simulation::makeFilename( const string& basename, int index )
{
ostringstream result;
result << basename << index;
return result.str();
}
これにより、Abundances_0 と Abundances_IDs_0 が作成されますが、他には何も作成されません。それらのファイルに書き込むことができます。他のファイル名は問題なく作成できますが、ファイルが表示されません。
おそらくストリームに関する基本的な何かが欠けているのでしょうが、何が原因なのかわかりません。
編集
次のコードは、正しいファイル名を選別するために出力します。
for ( int d = 0; d < NUM_DEMES; d++ ) {
abundanceStream.open( makeFilename( "Abundances_", d ).c_str(),ios::app);
abundanceStream << "stuff\n";
cout << makeFilename( "Abundances_", d ).c_str() << endl;
abHeaderStream.open( makeFilename( "Abundances_IDs_", d ).c_str(),ios::app);
abHeaderStream << "more stuff\n";
cout << makeFilename( "Abundances_IDs_", d ).c_str() << endl;
}
ただし、"stuff" と "more stuff" は Abundances_0 と Abundances_IDs_0 にのみ表示されます。