Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 动态输出文件名(C+;+;)_C++_Ofstream_Ostringstream - Fatal编程技术网

C++ 动态输出文件名(C+;+;)

C++ 动态输出文件名(C+;+;),c++,ofstream,ostringstream,C++,Ofstream,Ostringstream,我正在尝试创建由动态索引(d={0,…,NUM_DEMES-1})订阅的输出文件。目前,我只获取第一个值(d=0)的输出文件 #包括 #包括 无效模拟::更新模拟(双t) { ... 河流丰度; 逆流而上; 如果(步骤==1){ 对于(int d=0;d

我正在尝试创建由动态索引(d={0,…,NUM_DEMES-1})订阅的输出文件。目前,我只获取第一个值(d=0)的输出文件

#包括
#包括
无效模拟::更新模拟(双t)
{
...
河流丰度;
逆流而上;
如果(步骤==1){
对于(int d=0;d结果您始终使用相同的对象。您可以在“使用”后关闭流,也可以为每个文件使用不同的对象。

一旦打开流,除非您先关闭它,否则对
打开的另一个调用将失败。因此,可以添加对
丰度流.close()和
abHeaderStream.close()的调用
在每个循环结束时,或在循环中定义流对象的范围,以便每次都得到一个新对象。

每次调用的result.str()值是多少?NUM_DEMES设置为多少?NUM_DEMES的值是多少?抱歉。NUM_DEMES=2,d正确递增。result.str()也可以正常检查(也就是说,我不能忘记这个非常重要的原则。谢谢。
#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();
}
  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;
  }