当前位置: 首页 > 知识库问答 >
问题:

将ifstream作为参数传递给类构造函数

黄涵畅
2023-03-14

我正在尝试通过:如果流文件;

在我的主()中,到一个名为“FIFO”的类的构造函数:FIFO(文件);

在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/…/…/…/…/包含/c /4.4.7/bits/localefwd.h: 43,从/usr/lib/gcc/x86_64-redhat linux/4.4.7/…/…/…/…/包含/c /4.4.7/string: 45,从FIFO.cc: 7:/usr/lib/gcc/x86_64-redhat linux/4.4.7/…/…/…/包含/c /4.4.7/bits/ios_base.h:在成员函数'std::basic_ios

我不确定使用引用传递ifstream是否有效,或者这是我的代码问题。

谢谢!

共有2个答案

岑俊弼
2023-03-14

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

FIFO (std::ifstream);

FIFO (std::ifstream &);
梁兴文
2023-03-14

在构造函数声明中,您将按值而不是按引用获取 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的复制构造函数是私有的(或在C11中被删除)。通过按值存储成员变量,您试图复制传递给构造函数的std::ifstream对象。

 类似资料:
  • 我试图将构造函数参数动态传递给Springboot框架中的一个bean。我已经使用context.getBean(class,arg...)在Spring中动态传递构造函数参数,但它没有成功获取值并显示默认值。我的代码有什么问题? 项目结构: 应用程序上下文.xml 应用 活动 输出:

  • 问题内容: 我的工厂如下 这是Foo的定义: 好。我不确定如何使用Guice将此参数传递给Foo构造函数? 有任何想法吗? 问题答案: 所有“ Guice构造函数参数”答案在某种程度上似乎都不完整。这是一个完整的解决方案,包括用法: //在实现类上注释构造函数和辅助参数 //使用仅接受辅助参数的create()方法创建工厂接口。 // FooFactory接口没有显式的实现类(Guice Magi

  • 问题内容: 我已经熟悉Android框架和Java,并希望创建一个通用的“ NetworkHelper”类,该类可以处理大多数联网代码,使我能够从中调用网页。 我遵循了来自developer.android.com的这篇文章来创建我的网络类:http : //developer.android.com/training/basics/network- ops/connecting.html 码:

  • 我正在使用一个第三方库函数,它有大量的位置参数和命名参数。在我的代码中,从多个点使用相同的参数/值调用该函数。 为了便于维护,我不想在代码中多次硬编码几十个相同的参数。我希望有一种方法可以在数据结构中存储它们一次,所以我只需要传递数据结构。按照以下思路: 假设我调用的函数的签名如下: 假设在我的代码中,我想用 for arg1, for arg2 for arg4 (而且我没有使用arg3)。 我

  • 问题内容: 我迷失在通用丛林中,请帮助我:)我有这样的事情: 据我认为,编译器应该实现,因为它实现了。 为什么会出现此错误? 我该如何工作? ps:如果您对此有更好的标题,请进行更改。我无法弥补。 问题答案: 问题是,您的构造函数需要一个,并且在您的代码中将其推断为。 因此,您应该通过,然后通过。但是您不能像那样直接传递该实例。 但是,您可以通过将类强制转换为所需实例来解决此问题: 请注意,如何首

  • 我为什么要这样做?因为lambda表达式生成的ClosureType不是默认可构造的。通过这个“技巧”,我可以默认构造这样的closureType。 此外,模板参数的要求是,它必须为空=>