如果将fstream声明为类的成员,可以使用什么构造函数来实例化fstream?
#include <fstream>
class Foo {
Foo();
// not allowed
std::fstream myFile("\\temp\\foo.txt", fstream::in | fstream::out | fstream::trunc);
// allowed
std::fstream myFile;
}
// constructor
Foo::Foo() {
// what form of myFile("\\temp\\foo.txt", fstream::in | fstream::out | fstream::trunc) can I use here?
myFile = ???
}
答案 0 :(得分:7)
在新版本的C ++(C ++ 11)中,您拥有的上述代码非常精细;在类的主体内允许初始化。
在C ++ 03(以前版本的C ++)中,您可以使用成员初始化列表来初始化fstream
,如下所示:
Foo::Foo() : myFile("file-name", otherArguments) {
// other initialization
}
从语法上讲,这是通过在构造函数名称之后但在大括号之前添加冒号来完成的,然后列出要初始化的字段的名称(此处为myFile
),然后在括号中添加您想要的参数用来初始化它。这将导致myFile
正确初始化。
希望这有帮助!
答案 1 :(得分:5)
另一种选择是:
Foo::Foo () {
myFile.open("\\temp\\foo.txt", fstream::in | fstream::out | fstream::trunc);
if(!myFile.is_open()) {
printf("myFile failed to open!");
}
//other initialization
}