加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 将istream传递给函数

发布时间:2020-12-16 10:32:51 所属栏目:百科 来源:网络整理
导读:我正在制作一个类似于口袋妖怪的游戏类型的程序.我们有一个锦标赛课程,跟踪几个团队(它自己的类),其中包括宠物(它自己的类),不同种类的宠物是CPet的子类. 我们正在尝试将文件名传递给main,从主传递该文件名到Tournament类.在Tournament类中,我们打开文件: 1
我正在制作一个类似于口袋妖怪的游戏类型的程序.我们有一个锦标赛课程,跟踪几个团队(它自己的类),其中包括宠物(它自己的类),不同种类的宠物是CPet的子类.

我们正在尝试将文件名传递给main,从主传递该文件名到Tournament类.在Tournament类中,我们打开文件:

14 //Construct a tournament
 15 CTournament::CTournament(const char *Filename){
 16         //opening file
 17         ifstream inFile(Filename,ios::in);
 18         if(inFile.bad()){
 19                 cout << "File error" << endl;
 20                 return ;
 21         }
 22          //get Teamlist for tournament
 23          while(!(inFile.eof())){
 24                  CTeam* temp = new CTeam;
 25                  temp->ParseTeam(inFile);
 26 
 27                  TeamList.push_back(temp);
 28          }
 29 }

在这里,我们将文件传递给CTeam.ParseTeam,它看起来像:

30 void CTeam::ParseTeam(std::istream in){
     31   string readline;
     32   getline(in,readline);
     33   this->TeamName = readline;
     34   while(!(in.eof())&&(readline != " " || readline != "/n"))
     35   {
     36           getline(in,readline);
     37           this->Parse(readline);
     38   }
     39 }

我们收到错误:

In file included from /usr/include/c++/4.4/ios:39,from /usr/include/c++/4.4/ostream:40,from /usr/include/c++/4.4/iostream:40,from CTournament.h:11,from CTournament.cpp:8:
/usr/include/c++/4.4/bits/ios_base.h: In copy constructor 'std::basic_ios<char,std::char_traits<char> >::basic_ios(const std::basic_ios<char,std::char_traits<char> >&)':
/usr/include/c++/4.4/bits/ios_base.h:790: error: 'std::ios_base::ios_base(const std::ios_base&)' is private
/usr/include/c++/4.4/iosfwd:47: error: within this context
/usr/include/c++/4.4/iosfwd: In copy constructor 'std::basic_istream<char,std::char_traits<char> >::basic_istream(const std::basic_istream<char,std::char_traits<char> >&)':
/usr/include/c++/4.4/iosfwd:53: note: synthesized method 'std::basic_ios<char,std::char_traits<char> >&)' first required here 
CTournament.cpp: In constructor 'CTournament::CTournament(const char*)':
CTournament.cpp:25: note: synthesized method 'std::basic_istream<char,std::char_traits<char> >&)' first required here 
CTournament.cpp:25: error:   initializing argument 1 of 'void CTeam::ParseTeam(std::istream)'

我知道有一个类似的问题,他没有包括fstream.我们已将它包含在两个头文件中.

我想也许这是一个没有将正确的类型传递给PraseTeam的问题,但我找不到任何非常具体的关于如何将文件传递给ParseTeam以验证我是否正确执行的问题.

提前致谢.

解决方法

您需要通过引用传递流,因为流通常不是可复制的:

void CTeam::ParseTeam(std::istream &in)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读