如何使用结构传递文件对象

how to pass file object using structure?

本文关键字:文件 对象 何使用 结构      更新时间:2023-10-16

我在使用结构传递文件对象时遇到一个问题,代码是

#include <iostream>
#include<fstream>
using namespace std;
typedef struct abc
{
    ofstream &t;
}stabc;
class dc
{
    public:
    static void fun(stabc *ad);
    static stabc ab;
};
int main()
{
    ofstream str;
    str.open("hello.csv",ios::app);
    str<<"hellllooo"<<endl;
    dc d;
    d.ab.t=str;
    dc::fun(&d.ab);
    cout << "Hello world!" << endl;
    return 0;
}
void dc::fun(stabc *ad)
{
    ofstream& st=ad->t;
    st<<"kikiki"<<endl;
}

它给出未初始化的引用成员 abc::t。请告诉我我错在哪里?

您需要初始化

成员初始值设定项列表中的引用t
引用是特殊的构造,需要在创建时初始化。由于不初始化成员引用,因此编译器会发出诊断。

必须在成员初始值设定项列表中初始化成员引用。

在线样本

#include <iostream>
#include <fstream>
using namespace std;
struct stabc
{
    ofstream &t;
    stabc(ofstream &obj):t(obj){}
};
int main()
{
    ofstream obj2;
    stabc obj(obj2);
    return 0;
}

另请注意,在C++(与 C 不同)中,您无需typedef结构即可在没有关键字 struct 的情况下使用它。您可以简单地使用结构名称,而无需在前面预置struct

不能重新拔插引用。它们必须初始化,并且没有引用的"默认"值。因此,您需要使用对文件流对象的引用构造abc的实例:

struct abc
{
    std::ofstream &t;
};

然后

abc myabc = {str};

或者给abc一个构造函数并使用构造函数初始化列表:

struct abc
{
  abc(std::ofstream& o) : t(o) {}
  std::ofstream &t;
};
abc myabc(str);