一个关于ifstream作为参数传递问题

时间:2022-08-29 21:10:19
下面是代码:
//Test.cpp
#include"header/Test.h"
#include <fstream>

class Time
{
   pulic :
     ifstream infile;

     Time(ifstream &infile)
     {
         this->infile = infile; //编译出错,说:ios_base.h::operator= is private,我找到该文件改成public  还是有错,又报:undefined reference to 'std::ios_base::operator=(std::io_base const&)'collect2: ld returned 1 exit status.大家可以试试这个程序。
     }
};

int main()
{
   ifstream in;
   in.open("src/test.doc",ios::in|ios::binary);
   ...
   Time t(in);
   return 0;
}

9 个解决方案

#1


你传入引用 然后直接操作不行么....ifstream 不能复制 

#2


不让你用=,你还非得用。
换个思路吧。

#3


传引用吧

#4


在类中需要使用引用传递流状态
ifstream &infile; 

#5


引用 1 楼 lori227 的回复:
你传入引用 然后直接操作不行么....ifstream 不能复制 

直接用,不能都在构造函数吧,我在Time类的其它函数中也要用到这个对象啊。
我就觉得ifstream不让引用赋值,怎么解决这个问题?有什么其它方法吗?

#6


你把文件名作参数 传到构造函数里~~~~ 然后在构造里ifstream打开文件 初始化吧!!

#7


不懂。。。 学习来了

#8


引用 6 楼 lori227 的回复:
你把文件名作参数 传到构造函数里~~~~ 然后在构造里ifstream打开文件 初始化吧!!

我这只是一个例子,用来说明问题的。我的实际应用是要把ifstream的一个对象传到另外的类中。

#9


这个构造函数中,只能用初始化列表的办法传递引用,因为进入构造函数内部就只有赋值一途。
其余函数,直接用就可以了,就和使用其余数据成员一样,只是不要再定义了;如果有打开文件的操作,那么就必须要close文件,当然,这主要是为了处理方便,否则其本体什么时候不能用了都不知道。

#1


你传入引用 然后直接操作不行么....ifstream 不能复制 

#2


不让你用=,你还非得用。
换个思路吧。

#3


传引用吧

#4


在类中需要使用引用传递流状态
ifstream &infile; 

#5


引用 1 楼 lori227 的回复:
你传入引用 然后直接操作不行么....ifstream 不能复制 

直接用,不能都在构造函数吧,我在Time类的其它函数中也要用到这个对象啊。
我就觉得ifstream不让引用赋值,怎么解决这个问题?有什么其它方法吗?

#6


你把文件名作参数 传到构造函数里~~~~ 然后在构造里ifstream打开文件 初始化吧!!

#7


不懂。。。 学习来了

#8


引用 6 楼 lori227 的回复:
你把文件名作参数 传到构造函数里~~~~ 然后在构造里ifstream打开文件 初始化吧!!

我这只是一个例子,用来说明问题的。我的实际应用是要把ifstream的一个对象传到另外的类中。

#9


这个构造函数中,只能用初始化列表的办法传递引用,因为进入构造函数内部就只有赋值一途。
其余函数,直接用就可以了,就和使用其余数据成员一样,只是不要再定义了;如果有打开文件的操作,那么就必须要close文件,当然,这主要是为了处理方便,否则其本体什么时候不能用了都不知道。