gpt4 book ai didi

c++ - tellg() 用于 const 引用对象。 "Copying"fstream对象

转载 作者:行者123 更新时间:2023-12-01 14:41:49 25 4
gpt4 key购买 nike

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

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

我想在目标对象中设置一个文件位置,就像在源中一样。如果我使参数非常量 [ 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
}
}

最佳答案

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

关于c++ - tellg() 用于 const 引用对象。 "Copying"fstream对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17003275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com