为什么我不能在类的构造函数的初始化列表中初始化ifstream?

时间:2014-10-11 11:55:17

标签: c++

#include <fstream>
#include <iostream>

using namespace std;

class file_reader {

public:
    file_reader(const char* file_name) : file(ifstream(file_name)) { }

    char operator[](int index) const {
        file.seekg(index);
        return file.get();
    }

private:
    ifstream file;

};

我收到错误:'std::ios_base::ios_base(const std::ios_base&)' is private。好像代码试图在层次结构中调用更高的构造函数。虽然ifstream的构造函数需要const char*。有什么问题?

1 个答案:

答案 0 :(得分:7)

通过创建临时ifstream(file_name)然后从中初始化file,您尝试调用文件的复制构造函数,这会失败,因为该构造函数在声明它的位置是私有的(在基础{{ 1}});溪流无法复制。

我确定你打算写这个:

ios_base

记住,这个:

file_reader(const char* file_name) : file(file_name) { }

在初始化struct T { S object; type() : object(arg) {}; }; 方面非常像:

S