将文件传递给构造函数进行读取

时间:2014-02-25 21:32:20

标签: c++ file constructor

class Read
{
public:
    Read(ifstream &file)
    {
        mFile=file;
    }
private:
    ifstream mFile;
    string str;
};


int main()
{
    Read r("sample.txt");

    return 0;
}

我正在尝试使用构造函数来读取文件。我看到了堆栈溢出的另一个例子,并尝试复制它但失败了。如何使用构造函数正确读取文件。 语法是否关闭?

3 个答案:

答案 0 :(得分:1)

您无法复制或指定ifstreams,但可以从字符串文字初始化它们。所以你可以这样做:

class Read
{
public:
    Read(const char* filename) : mFile(filename) {}
private:
    ifstream mFile;
    string str;
};

请注意,这会使Read不可复制且不可分配。但移动建设和移动任务将起作用。

请注意,如果您确实要传递ifstream,那么您可以做的最好的事情就是传递临时值,并使用数据成员的移动构造函数。您可以使用此构造函数实现它:

Read(ifstream&& file) : mFile(std::move(file)) {}

用法:

Read r1("file.txt");                // const char* ctor
Read r2(std::ifstream("file2.txt"); // ifstream&& ctor

答案 1 :(得分:1)

“Sample.txt”不是ifstream。而是使用传递的字符串打开文件。

  

mFile.open(文件);   其中file是c字符串。

答案 2 :(得分:0)

无法复制标准文件流。构造函数中的赋值是调用流的私有(C ++ 11中的delete'd)复制赋值运算符。这样做的正确方法是使用 member initializer-list 调用相应的构造函数。该参数也应该是std::string类型。

Read(const std::string& file)
   : mFile(file)
// ^^^^^^^^^^^^^
{ }