class Read
{
public:
Read(ifstream &file)
{
mFile=file;
}
private:
ifstream mFile;
string str;
};
int main()
{
Read r("sample.txt");
return 0;
}
我正在尝试使用构造函数来读取文件。我看到了堆栈溢出的另一个例子,并尝试复制它但失败了。如何使用构造函数正确读取文件。 语法是否关闭?
答案 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)
// ^^^^^^^^^^^^^
{ }