Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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++_Oop_Object_Reference_Ofstream - Fatal编程技术网

C++ 是否有一种方法可以传递对对象的流引用?

C++ 是否有一种方法可以传递对对象的流引用?,c++,oop,object,reference,ofstream,C++,Oop,Object,Reference,Ofstream,我试图将一个对ofstream的引用和一个打开的文件传递给一个对象,这样它的函数也可以打印到该文件中 当我试图编译我的程序时,它说所有引用成员都必须初始化,我在网上读到流不能被重新分配。那我该怎么办 以下是我为我的构造函数准备的: GameShow::GameShow(int numElements){ // Initialize heap v = new Contestant[numElements+1]; capacity = numElements+1;

我试图将一个对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,但是我的对象函数需要能够修改相同的文件。。。我觉得我什么都试过了

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

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

       // 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:在构造函数“GameShow::GameShow(int)”中:
GameShow.cpp:27:1:错误:未初始化'std::of Stream&{aka class std::basic_of Stream&}'[-fppermissive]中的引用成员
GameShow::GameShow(整数){
^
GameShow.h:14:18:注意:“std::ofstream&GameShow::outFile”应该初始化
标准::流和流出管;
^
make:**[GameShow.o]错误1

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

作为成员用户指针引用

流出物


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

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

GameShow(int numElements);

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

不要声明引用(
流和流出口;
),声明一个对象并通过引用将该对象传递给函数。@MariusBancila我想这是我唯一的选择。真的没有办法将引用传递给对象??正如您所示的代码没有任何错误。显示其余部分,以及更精确的错误消息。@BenjaminLindley给我一分钟,好吗post@JayB你呢我们要问的是如何初始化一个对象的引用数据成员。你应该发布一个带有失败代码的MCVE,因为原则上这不应该是一个问题。啊,好吧,我有一个没有ofstream参数的构造函数重写…我没有建立那个连接,应该可以修复它。如果你需要一个引用,你可能不总是能够初始化,或者你可能需要改变它的引用,这就是指针的作用。我在想,但是如果我把地址传递给ofstream指针,语法会是什么?我会只是(*ofstream)是的,这就是语法。抱歉,键入错误。改为作为成员用户指针引用。ofstream*outFile;…GameShow(int numElements,std::ofstream&of);谢谢,juanchopanza。我是这个平台的新手。你可以将ofstream初始化为cout吗?你能提供如何实现这一点的语法吗?我从来没有听说过suchNo,不是一个
ofstream
,而是一个
ostream
。我错过了这个。我只是要删除另一个构造函数,它目前还没有使用。谢谢你让我错过了这个地方
GameShow(int numElements);