以前,我会将fstream对象的地址传递给执行I / O操作的任何函数,包括构造函数。但我想尝试将fstream对象作为成员变量使用,以便所有后续I / O操作都可以使用这些变量而不是将它们作为参数传递。
考虑以下Java程序:
TypeError: Cannot read property 'insertBefore' of null
C ++与此等价的是什么?我试过这个
public class A {
Scanner sc;
public A(Scanner read) {
sc = read;
}
}
但是这给了我一个编译错误:
[错误]无效的用户定义从'std :: ofstream {aka std :: basic_ofstream}'转换为'std :: ofstream * {aka std :: basic_ofstream *}'[-fpermissive]
答案 0 :(得分:5)
我建议使用引用类型作为类的成员变量。
class A {
ofstream& out;
public:
A (ofstream &output) : out(output) {}
};
它比使用指针更清晰。
如果您希望类型为A
的对象从流中读取数据(例如名称Scanner
建议),请使用std::istream
。
class A {
std::istream& in;
public:
A (std::istream &input) : in(input) {}
};
答案 1 :(得分:4)
你可能想要
class A {
ofstream *out;
public:
A (ofstream &output) : out(&output) {
// ^ Take the address
}
};
由于std::ofstream
专门用于文件,因此更好的接口是:
class A {
ostream *out;
public:
A (ostream &output) : out(&output) {
}
};
因此,您可以透明地将您的类用于非面向文件的输出目标,例如
A a(std::cout); // writes to standard output rather than using a file