C++ 流式打印的另一个功能

C++ 流式打印的另一个功能,c++,ofstream,C++,Ofstream,我有个奇怪的问题。我有两个函数,它们都有一个通过引用传递的流。但是,当我调用第二个函数时,第一个函数的一部分正在打印 以下是第一个函数: void GamePlay::dealDominos(ofstream& outStream, int seed){ for(int i = 0; i < 10; ++i) { outStream << "random " << rand() << endl; }

我有个奇怪的问题。我有两个函数,它们都有一个通过引用传递的流。但是,当我调用第二个函数时,第一个函数的一部分正在打印

以下是第一个函数:

void GamePlay::dealDominos(ofstream& outStream, int seed){
    for(int i = 0; i < 10; ++i) 
    {

       outStream << "random " << rand() << endl; 

    }
}
我不想在标签和序列之间印上“随机”一词


如何修复此问题?

看起来有两个独立的
流对象引用同一个底层文件,这是一个非常糟糕的主意,除非在每次写入时都要执行大量的查找操作和刷新,以确保每次写入时都能更新文件位置。

这些函数是如何调用的?来自不同线程?它们是从主类调用的。”游戏性;游戏。多米诺骨牌(扩张,种子);游戏。查找最长的seq(扩展);'很抱歉,不知道如何在注释中使用代码语法。(要做到这一点,请在代码周围加上反勾)。从表面上看,似乎两个线程同时向流写入数据,结果是交错的。除非你的评论另有说明,“随机”一词的某些部分完全缺失,实际的随机数也是如此。所以我不知道。
toStringSeq()
是什么样子的?你有两个单独的
ofstream
对象引用同一个底层文件吗?我只有一个对象,并通过引用传递它。如果ofstream实际上是cout或cerr,而你也使用其中一个,那么它看起来会完全像这样。所以,请检查您是否使用cout或cerr。@dom0,您能再解释一下吗?
void GamePlay::findLongestSeq(ofstream& outStream)
{
    outStream << toStringSeq(label, maxSeq) << endl;
}
NEW MAX [  T   0  8 ]
NEW MAX random [  T   0  8 ][  T   8  1 ]
NEW MAX ndom [  T   0  8 ][  T   8  1 ][  T   1  1 ][  T   1  2 ]
NEW MAX dom [  T   0  8 ][  T   8  1 ][  T   1  1 ][  T   1  2 ][  T   2 11 ]
MAX SEQ FOR:    dom [  T   0  8 ][  T   8  1 ][  T   1  1 ][  T   1  2 ][  T   2 11 ]