我想用.txt文件做很多事情,所以我想把它分解成函数。但是即使我通过引用传递文件流,我也不能编译程序。
#include "Executive.h"
#include "Clip.h"
#include <string>
#include <iostream>
#include <fstream>
void Executive::readFile()
{
std::fstream streamer;
streamer.open(m_file);
if(streamer.is_open ())
{
findStart(streamer);
for(int i = 0; i < 13; i++)
{
std::string temp;
streamer >> temp;
}
for(int i = 0; i < 20; i++)
{
std::string temp;
streamer >> temp;
std::cout << temp << " ";
if(i == 10) {std::cout << "\n";}
}
streamer.close();
return;
}
else
{ throw std::runtime_error("Could not read file!\n"); }
}
void findStart(const std::fstream& stream)
{
bool isStart = 0;
while(!isStart)
{
std::string temp;
stream >> temp;
if(temp == "Sc/Tk")
{ isStart = 1; }
}
}
1条答案
按热度按时间wrrgggsh1#
要解决这个问题,你可以在
findStart
函数的声明中删除const
关键字。TL;DR;
一般来说,如果你只想从文件中读取,请使用ifstream而不是fstream。
你的代码问题是
stream >> temp;
不与const fstream
一起工作,因为operator >>
已经声明如下正如你所看到的,
operator>>
没有任何const reference
流对象的重载,所以你的代码是错误的,不能编译,如果你想知道为什么C++没有提供这个重载,你可以看到下面的实现例子正如你在上面的例子中所看到的,为了实现
operator>>
,我们需要改变流的状态来知道(并保存)最后一次读取的位置。