我有一个带有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。
答案 0 :(得分:1)
不清楚为什么您需要通过引用存储它,而是在构造函数中创建它(而不是将其作为参数传递给构造函数)。
具有类型'std :: fstream'的成员(按值而不是引用)是完全正确且安全。
类型不完整的错误消息是由于文件中没有#include <fstream>
而引起的。
答案 1 :(得分:1)
您的问题是您要存储对此对象的引用,因此它必须存在于某处。 因此,您可以向构造函数传递对fstream的引用,也可以创建一个(不带&的)引用。 类型不完整的错误是因为您还必须包括适当的标头,在本例中为fstream。