【问题标题】:Reading line by line const data in C++在 C++ 中逐行读取 const 数据
【发布时间】:2018-03-17 16:58:40
【问题描述】:

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

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 的?

【问题讨论】:

  • 什么是“常量流”?上次我检查时,没有这样的东西,如果有,你将无法从中读出一个字符。因为是const
  • 无法复制 iostream。 std::istream test = n_is; 尝试复制。在 c++11 中出现 delete 函数之前,最好的解决方案是创建函数 private。这就是你所遇到的。赋值运算符是private
  • 顺便说一句,while (!n_is.eof()) 是个坏主意。更多信息:Why is iostream::eof inside a loop condition considered wrong?

标签: c++ constants getline istream


【解决方案1】:

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

去掉test变量,从n_is参数中去掉const,直接使用n_isstd:::getline()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2013-04-16
    • 2010-11-19
    相关资源
    最近更新 更多