在C ++中逐行读取const数据

时间:2017-10-05 23:53:58

标签: c++ const getline istream

我必须编写一个函数,通过逐行读取文本文件来验证数字。我的问题是这是一个const流。我认为创建一个新流会有所帮助,但我的代码没有正确编译。

bool validateNumber(const std::istream& n_is)
{
    while (!n_is.eof())
    {
        std::string line;
        std::istream test = n_is;
        std::getline(test,line); // read line

我收到此错误消息:

  

/ usr / include / c ++ / 5 / bits / ios_base.h:855:5:错误:'std :: ios_base :: ios_base(const std :: ios_base&)'是私有的。

即使它是const,我该怎么做才能读取流?

1 个答案:

答案 0 :(得分:3)

std::istream专门设计为不允许复制,因此您使用test变量将无效。

删除test变量,从const参数中删除n_is,并将n_is直接与std:::getline()一起使用:

bool validateNumber(std::istream& n_is)
{
    std::string line;
    while (std::getline(n_is, line)) // read line
    {
        ...
    }
}