有没有办法传递对对象的 ofstream 引用?

Is there a way to pass in a ofstream reference to a object?

我正在尝试将对带有打开文件的 ofstream 的引用传递给对象,以便它的函数也可以打印到文件。

当我尝试编译我的程序时,它说必须初始化所有引用成员,而且我在网上看到流不能重新分配。那我该怎么办?

这是我的构造函数:

GameShow::GameShow(int numElements){

    // Initialize heap
    v = new Contestant[numElements+1];
    capacity = numElements+1;
    size = 0;
}


GameShow(int numElements, std::ofstream &of)
: outFile(of){

        // Initialize heap
    v = new Contestant[numElements+1];
    capacity = numElements+1;
    size = 0;
    outputToFile = true;
    handle.reserve(numElements+1);
    handle.resize(numElements+1, -1);
}

这是我在头文件中的声明:

// Members
....
ofstream &outFile;
....
GameShow(int numElements);
GameShow(int numElements, std::ofstream &of);
....

我在 main() 函数中打开了 ofstream,但是我的对象的函数需要能够修改同一个文件...我觉得我已经尝试了所有方法。

当我尝试传入文件名并尝试在对象中以追加模式打开它并打印到它时,输出完全乱序并且与我的主函数的输出完全不同步.似乎我从我的对象调用的所有打印语句都保存在缓冲区中,直到我的主函数结束时关闭流。任何帮助将不胜感激。

正在尝试在我的主函数中使用构造函数:

       // Attempt to open output file
    ofstream outFile;
    outFile.open(outFileName);

    if(inFile.is_open()){
            if(outFile.is_open()){
                    // Get information
                    int numContestants = 0;
                    inFile >> numContestants;


                    // Process file
                    if(numContestants > 0){
                            GameShow gs(numContestants, outFile);

错误(我得到的唯一一个):

GameShow.cpp: In constructor ‘GameShow::GameShow(int)’:
GameShow.cpp:27:1: error: uninitialized reference member in ‘std::ofstream& {aka class std::basic_ofstream<char>&}’ [-fpermissive]
 GameShow::GameShow(int numElements){
 ^
GameShow.h:14:18: note: ‘std::ofstream& GameShow::outFile’ should be initialized
std::ofstream &outFile;
              ^
make: *** [GameShow.o] Error 1

引用成员不能未初始化。您还需要在 GameShow(int numElements) 构造函数中初始化 outFile

而不是引用作为成员用户指针。

ofstream *outFile;

.....

GameShow(int numElements, std::ofstream *of);

从错误消息来看,您似乎有另一个构造函数:

GameShow(int numElements);

在该构造函数的实现中,您没有初始化变量 outFile。我不确定将该变量初始化为什么是合适的值。如果将变量更改为 std::ostream 类型,则可以将其初始化为 std::cout.