const参考对象的tellg()。 “复制”fstream对象

时间:2013-06-08 19:54:20

标签: c++

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

  • 错误C2662:'std :: basic_istream< _Elem,_Traits> :: tellg':无法将'this'指针从'const std :: ifstream'转换为'std :: basic_istream< _Elem,_Traits> &安培;'

我想在源中设置目标对象中的文件位置。 如果我使参数non-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
    }
}

1 个答案:

答案 0 :(得分:3)

由于b tellg(通过可能设置fail状态)会更改流的状态(当然,搜索和任何形式的读取或写入操作都是如此),您不能这样做一个const个对象。但是,我希望您可以,如果您想以这种方式解决它,将m_fin声明为mutable,这意味着编译器甚至可以为const对象更改它。