如何将fstream对象用作成员变量?

Man*_*uel -2 c++ io fstream

以前,我会将fstream对象的地址传递给执行I/O操作的任何函数,包括构造函数.但我想尝试将fstream对象作为成员变量使用,以便所有后续I/O操作都可以使用这些变量而不是将它们作为参数传递.

考虑以下Java程序:

public class A {
    Scanner sc;

    public A(Scanner read) {
        sc = read;
    }
}
Run Code Online (Sandbox Code Playgroud)

什么是C++相当于此?我试过这样做

class A {
    ofstream *out;

    public:
        A (ofstream &output) {
            out = output;
        }
};
Run Code Online (Sandbox Code Playgroud)

但这给了我一个编译错误:

[错误]无效的用户定义从'std :: ofstream {aka std :: basic_ofstream}'转换为'std :: ofstream*{aka std :: basic_ofstream*}'[-fpermissive]

R S*_*ahu 5

我建议使用引用类型作为类的成员变量.

class A {
    ofstream& out;

    public:
        A (ofstream &output) : out(output) {}
};
Run Code Online (Sandbox Code Playgroud)

它比使用指针更干净.

如果您希望类型的对象A从流中读取数据(如名称Scanner所示),请使用std::istream.

class A {
    std::istream& in;

    public:
        A (std::istream &input) : in(input) {}
};
Run Code Online (Sandbox Code Playgroud)