Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';在类的构造函数的初始值设定项列表中初始化ifstream吗? #包括 #包括 使用名称空间std; 类文件读取器{ 公众: 文件读取器(常量字符*文件名):文件(ifstream(文件名)){} 字符运算符[](整数索引)常量{ 文件.seekg(索引); 返回file.get(); } 私人: ifstream文件; };_C++ - Fatal编程技术网

C++ 为什么可以';在类的构造函数的初始值设定项列表中初始化ifstream吗? #包括 #包括 使用名称空间std; 类文件读取器{ 公众: 文件读取器(常量字符*文件名):文件(ifstream(文件名)){} 字符运算符[](整数索引)常量{ 文件.seekg(索引); 返回file.get(); } 私人: ifstream文件; };

C++ 为什么可以';在类的构造函数的初始值设定项列表中初始化ifstream吗? #包括 #包括 使用名称空间std; 类文件读取器{ 公众: 文件读取器(常量字符*文件名):文件(ifstream(文件名)){} 字符运算符[](整数索引)常量{ 文件.seekg(索引); 返回file.get(); } 私人: ifstream文件; };,c++,C++,我得到一个错误:“std::ios\u base::ios\u base(const std::ios\u base&)”是私有的。代码似乎试图调用层次结构中更高的构造函数。尽管ifstream有一个构造函数,它接受const char*。问题出在哪里?通过创建一个临时的ifstream(文件名)然后从中初始化文件,您试图调用文件的副本构造函数,但这失败了,因为该构造函数在声明的位置是私有的(在基ios\u基中);无法复制流 我相信你是想写这封信的: #include <fstream&g

我得到一个错误:
“std::ios\u base::ios\u base(const std::ios\u base&)”是私有的
。代码似乎试图调用层次结构中更高的构造函数。尽管
ifstream
有一个构造函数,它接受
const char*
。问题出在哪里?

通过创建一个临时的
ifstream(文件名)
然后从中初始化
文件
,您试图调用文件的副本构造函数,但这失败了,因为该构造函数在声明的位置是私有的(在基
ios\u基中)
;无法复制流

我相信你是想写这封信的:

#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;

};

记住,这是:

file_reader(const char* file_name) : file(file_name) { }
就初始化而言,
S
非常类似于:

struct T
{
   S object;
   type() : object(arg) {};
};

通过创建一个临时的
ifstream(文件名)
然后从中初始化
文件
,您试图调用文件的复制构造函数,但这失败了,因为该构造函数在声明它的地方是私有的(在基
ios\u基
中);无法复制流

我相信你是想写这封信的:

#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;

};

记住,这是:

file_reader(const char* file_name) : file(file_name) { }
就初始化而言,
S
非常类似于:

struct T
{
   S object;
   type() : object(arg) {};
};

但是
file(file\u name)
是否等同于
file=file\u name
(当然不会编译),而
file(ifstream(file\u name))
是否等同于
file=ifstream(file\u name)
-它不应该调用复制构造函数,而应该调用赋值操作符?否,这两件事都不等同于另一件事。赋值运算符与初始化无关<成员初始化器列表中的code>file(file\u name)类似于
std::ifstream file(file\u name)
。因此初始化器列表总是使用给定参数调用初始化对象的构造函数?顺便说一句,我想添加一个方法,将流更改为不同的对象(即setter)。我可以说
file=somethingelse
。但这不会尝试调用复制构造函数吗?或者这样可以吗?另外,代码
private:ifstream文件
是否已经调用了
ifstream
的构造函数?但是
file(file\u name)
是否等同于
file=file\u name
(当然不会编译),而
file(ifstream(file\u name))
等同于
file=ifstream(file\u name)
-哪个不应该调用复制构造函数,而应该调用赋值运算符?不,这两个东西都不等同于另一个东西。赋值运算符与初始化无关<成员初始化器列表中的code>file(file\u name)类似于
std::ifstream file(file\u name)
。因此初始化器列表总是使用给定参数调用初始化对象的构造函数?顺便说一句,我想添加一个方法,将流更改为不同的对象(即setter)。我可以说
file=somethingelse
。但这不会尝试调用复制构造函数吗?或者这样可以吗?另外,代码
private:ifstream文件
是否已经调用了
ifstream
的构造函数?