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

时间:2015-03-31 12:58:36

标签: c++

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

#include<string>
#include<boost\filesystem.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() 
{

}

我的问题是,我希望在构造std::fstream类时有一个Filer的实例。我希望将此类分配给fileStr变量。那怎么能解决我的问题呢?

2 个答案:

答案 0 :(得分:2)

如果你想创建一个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)
{
}

答案 1 :(得分:0)

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

如果构造函数很简单,就像你的类所示,你可以使它成为一个内联函数:

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