如何初始化类型为fstream&的类成员

时间:2018-10-05 09:23:21

标签: c++

我有一个带有fstream&类型成员的类。这应该在某个时候附加到文件上。当我尝试编写默认构造函数时,编译器要求初始化所有类成员。如何初始化fstream成员而不将其附加到任何文件?代码和构造函数如下所示:

class Catalog {
int n;
std::fstream &ascii_inFile;
}

Catalog::Catalog()
: n(0), 
  ascii_inFile(fstream())

我尝试了不同的格式,所有这些格式都会产生不同的错误消息。例如,上面的代码会导致错误

error: invalid initialization of non-const reference of type 
‘std::fstream& {aka std::basic_fstream<char>&}’ from an rvalue...

另一方面,如果我将没有'&'的类成员定义为

std::fstream ascii_inFile;

然后我得到

error: field ‘ascii_inFile’ has incomplete type

初始化的正确语法是什么?或者,如何定义类成员以使其起作用?我没有c ++ 11。

2 个答案:

答案 0 :(得分:1)

不清楚为什么您需要通过引用存储它,而是在构造函数中创建它(而不是将其作为参数传递给构造函数)。

具有类型'std :: fstream'的成员(按值而不是引用)是完全正确且安全

类型不完整的错误消息是由于文件中没有#include <fstream>而引起的。

答案 1 :(得分:1)

您的问题是您要存储对此对象的引用,因此它必须存在于某处。 因此,您可以向构造函数传递对fstream的引用,也可以创建一个(不带&的)引用。 类型不完整的错误是因为您还必须包括适当的标头,在本例中为fstream。

相关问题