2

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

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

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

1 回答 1

5

由于 b tellg(通过潜在的设置fail状态)改变了流的状态(当然,搜索和任何形式的读或写操作也是如此),你不能在一个const对象上这样做。但是,如果您想以这种方式解决它,我希望您可以声明m_finmutable,这意味着编译器甚至允许对const对象进行更改。

于 2013-06-08T20:06:49.153 回答