【问题标题】:seekg invalid arguments?寻求无效的论点?
【发布时间】:2012-07-05 10:21:31
【问题描述】:

我是第一次尝试使用 seekg。 它在文档中说它的论点可能是:

istream& seekg (streampos pos);

istream& seekg (streamoff off, ios_base::seekdir dir);

据我了解,'streampos pos' 可能是一个 int?我看到了像“seekg(0)”这样的例子 但是,当尝试编译它时,它说我使用了无效的参数:

void function(int pos){
ifstream reader("data.dat");
if(!reader.is_open())
    return 0;
int posinArchive = pos * 74;
reader.seekg(posinArchive);

我什至尝试将其直接转换为 streampos:

  void function(int pos){
ifstream reader("data.dat");
if(!reader.is_open())
    return 0;
int posinArchive = pos * 74;
reader.seekg((streampos)posinArchive);

同样的事情。 seekg(0),什么也没有。 怎么了?

【问题讨论】:

  • 发布您遇到的错误的文本?
  • 无效参数的候选者是:std::basic_istream> & seekg(?) std::basic_istream> & seekg(long long int, enum std::_los_Seekdir)
  • 从错误中,听起来编译器几乎没有为您上面列出的方法的第一个变体找到声明/重载(来自文档)。我知道这可能是一个奇怪的问题,但是您的代码是否有可能无法访问streampos 的定义?或者,看看你是否对其他变体有更多的运气会很有趣......
  • 如果我输入 seekg (0, ios::end);它确实有效。此外,当我尝试投射时,streampos 会变成绿色,所以我认为它知道它是什么。
  • 好的,那么听起来您有一个解决方法。要弄清楚到底发生了什么,您可以考虑通过预处理器运行源文件,以确认 seekg 声明已从您包含的头文件中正确提取...

标签: c++ seekg


【解决方案1】:

第一个版本

stream& seekg ( streampos pos );

应该用于当您想要寻找您之前通过调用tellg 获得的职位时使用。

如果你想寻找位置 0,你必须使用seekg(0, ios::beg) 来获得从文件开头的零偏移量。

【讨论】:

    猜你喜欢
    • 2017-03-20
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    相关资源
    最近更新 更多