类的头文件中的C++初始化程序列表

C++ Initializer list in the header file of a class

本文关键字:初始化 程序 列表 C++ 文件      更新时间:2023-10-16

我的Filer.h文件中有以下类:

#include<string>
#include<boostfilesystem.hpp>
#include<fstream>
using namespace boost::filesystem;
#ifndef FILER_H
#define FILER_H
class Filer()
{
public :
    // I have tried many other syntax, but none of them worked.
    Filer() : fileStr();
    std::fstream& fileStr;
};
#endif

然后在我的Filer.cpp中,我这样定义它:

Filer::Filer() : fileStr() 
{
}

我的问题是,当构造Filer类时,我希望有一个std::fstream的实例。我想把这个类分配给fileStr变量。那么我该如何解决我的问题?

如果您想创建一个包含在此类中的std::fstream,只需从以下行中删除"与"号:

std::fstream& fileStr;

制作:

std::fstream fileStr;

fstream将自动构建。

如果您希望fileStr引用在其他地方定义的std::fstream,那么您需要一个构造函数来引用该外部fstream并使用它来初始化fileStr的引用。该代码看起来像:

Filer(std::fstream & stream) : fileStr(stream) 
{ }
std::fstream& fileStr;

如果在cpp文件中定义构造函数,则不能指定bool返回值,并且必须具有参数,这样它看起来像:

Filer::Filer(std::fstream & stream) 
      : fileStr(stream)
{
}

您有两个错误,第一个错误是您现在应该在声明中有初始值设定项列表。另一个错误是,如果您想要引用,则需要将std::fstream引用作为参数传递给构造函数,并将其用于初始值设定项。

如果构造函数很简单,比如为您的类显示的构造函数,那么您可以使它成为一个内联函数:

Filer(std::fstream& str) : fileStr(str)
{}