【问题标题】:tellg() for const reference object. "Copying" fstream objecttellg() 用于 const 引用对象。 “复制” fstream 对象
【发布时间】:2013-06-08 19:54:20
【问题描述】:

我正在编写一个处理文本文件的类。我想“复制” ifstream-object 属性。下面的代码显示了我是如何做到的。我的函数 w.m_fin.tellg() 有问题:

  • 错误 C2662: 'std::basic_istream<_elem>::tellg' : 无法将 'this' 指针从 'const std::ifstream' 转换为 'std::basic_istream<_elem> &'李>

我想在源对象中设置目标对象中的文件位置。 如果我将参数设为非 const [ Word(Word& w) ] 一切都可以。但我不想让它成为非常量。我应该怎么做才能解决这个问题?

谢谢

class Word
{
private:
    std::ifstream m_fin;
    std::string m_in_filename;

public:

    Word(const Word& w):  m_in_filename( w.m_in_filename ) 
    {
        m_fin(m_in_filename);
        m_fin.copyfmt( w.m_fin );                                  
        m_fin.clear( w.m_fin.rdstate() );
        m_fin.seekg( w.m_fin.tellg() );//here I get an error
    }
}

【问题讨论】:

  • 什么是w?我没有看到它在某处声明
  • @soon:大概w应该和prep一样。 @DFooz:请始终发布能够证明您的问题的真实代码。很高兴您编辑了代码以在此处发布,但是当您这样做时,您需要确保编辑后的版本仍然显示您的问题。
  • @ruakh,你是对的。对不起。固定

标签: c++


【解决方案1】:

由于 btellg(通过可能设置 fail 状态)会更改流的状态(当然,搜索和任何形式的读取或写入操作也是如此),您不能在 const 上执行此操作目的。但是,如果您想以这种方式解决它,我希望您可以将m_fin 声明为mutable,这意味着编译器即使对于const 对象也允许对其进行更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 2016-11-09
    • 2011-09-21
    • 2012-01-29
    相关资源
    最近更新 更多