0

我试图通过:ifstream infile;

在我的main()中,给了一个名为“FIFO”的类的构造函数:FIFO(infile);

在 FIFO (FIFO.h) 的头文件中,我有:

FIFO (std::ifstream);
std::ifstream infile;

在 FIFO.cc 中,我有:

FIFO::FIFO (std::ifstream & INFILE)
{
         infile = INFILE;
}

我一直喜欢(还有更多,我只是粘贴其中一个):

在 /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/localefwd.h:43 包含的文件中,来自/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/string:45,来自FIFO.cc:7:/usr /lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h:在成员函数'std::basic_ios > & std::basic_ios >::operator=(const std::basic_ios >&)': /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../ include/c++/4.4.7/bits/ios_base.h:793: 错误: 'std::ios_base& std::ios_base::operator=(const std::ios_base&)' 是私有的 /usr/lib/gcc/x86_64- redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd:47:错误:在此上下文中

我不确定是否使用参考作品传递 ifstream,或者这是我的代码问题。

谢谢!

4

2 回答 2

13

在您的构造函数声明中,您使用的std::ifstream是值而不是引用。代替

FIFO (std::ifstream);

它应该是

FIFO (std::ifstream&);

并且您正在按值而不是按引用存储成员变量“infile”。

std::ifstream infile;

应该

std::ifstream& infile;

由于您现在正在存储对 ifstream 的引用,因此您需要在初始化程序列表中对其进行初始化,而不是在构造函数中对其进行分配。

FIFO::FIFO (std::ifstream & INFILE)
    : infile(INFILE)
{
}

这是因为 的复制构造函数std::ifstream是私有的(或在 C++11 中被删除)。通过按值存储成员变量,您试图复制std::ifstream传递给构造函数的对象。

于 2013-04-19T02:12:30.493 回答
0

您的原型声明和实现的签名不匹配。改变

FIFO (std::ifstream);

FIFO (std::ifstream &);
于 2013-04-19T02:14:00.957 回答