有没有办法传入一个对象的流引用?

时间:2015-03-06 07:05:22

标签: c++ oop object reference ofstream

我正在尝试将带有打开文件的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,但是我的对象的函数需要能够修改同一个文件......我觉得我已经尝试了所有的东西。

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

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

       // 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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

GameShow(int numElements);

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

答案 2 :(得分:0)

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

ofstream * outFile;

...

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